본문 바로가기
[Java]

[Java] Basic 용어 정리

by SAMSUNG Metaverse-Cloud 2022. 12. 7.
728x90

 

 

Java Class

객체 지향 언어에서는 현실세계를 반영하기 위해 객체(Object)라는 개념을 도입하게 된다. 현실세계에서 보는 사람들, 자동차, TV 등이 객체지향언어에서는 객체로 표현이 된다.

클래스란 객체를 생성하기 위해 그 객체가 어떤 데이터를 갖고 어떤 연산을 하는지에 대해 정의한다.

클래스 정의
- 사람(Human)이라는 클래스가 있다고 가정하자. 사람은 눈, 코, 입이 있고, 손과 다리가 있다. 이런것이 클래스에서는 데이터이다. 그리고 눈으로는 사물을 보고, 코로는 냄새를 맡고, 입으로는 말을 하거나 음식을 먹는다. 이것이 클래스 관점으로 보면 연산이다.

간단하게 얘기하면 멤버 변수와 멤버 메소드라고 기억하길 바란다. 코드로 정의를 해본다면 이렇게 된다.

class Human{
    String eyes="눈";
    String ears="귀";
    String nose="코";
    String mouth="입";
     
    void useEyes(){
        System.out.println(eyes+"으로 봄");
    }
    void useEars(){
        System.out.println(ears+"로 소리를 들음");
    }
    void useNose(){
        System.out.println(nose+"로 냄새를 맡음");
    }
    void useMouth(){
        System.out.println(mouth+"으로 욕을 함");
    }
}

class라는 키워드로 Human이라는 클래스를 정의하고 있다. 클래스 안에는 데이터가 있고, 이 데이터들을 활용하여 행동을 정의하고 있다. 하지만 이렇게 클래스를 정의했다고 해서 바로 써먹을수 있는것은 아니다.

 

 

 

 

 

객체생성

자바에서는 모든 데이터를 객체로 취급한다. 클래스를 정의한 이후에 클래스를 통해서 객체를 생성해야 한다. 객체를 생성하는 방법은 new라는 키워드로 메모리에 할당을 해야하는데 이는 간단하다.

Human human=new Human();

클래스를 통해서 메모리에 생성을했다. 이제 human이라는 객체가 생성이 된것이다.

우리는 앞서 클래스를 정의할 때 메소드 들을 정의했었다. 그렇기 때문에 이 메소드들을 사용할 수 있는 것이다. 물론 그 객체의 변수들도 아래처럼 바꾸어 줄수 있다.

public class Main {
 
    public static void main(String[] args){
        Human human=new Human();
        human.eyes="쌍꺼풀 수술한 눈";
        human.useEyes();
        human.useEars();
        human.useNose();
    }
}

 

 

 

 

 

 

생성자

우리는 new라는 키워드를 통해서 객체를 생성할때

Human human = new Human();

라는 표현으로 객체를 생성했다. 하지만 눈 여겨 보면 괄호가 있는 것을 확인 할 수 있다. 분명 괄호를 쓰는 이유가 있을 것이다. 메소드처럼 그 안에 데이터를 매개변수로 전달하거나 하는 이유가 있지 않을까?
우리는 클래스로부터 객체를 생성할 때 초기 데이터를 전달해줄 수 있다. 그것이 바로 생성자라고 한다.

생성자는 객체가 생성될 때 가장 처음 호출하는 메소드라고 보면 된다. 이 생성자는 꼭 호출이 된다.
그리고 객체가 생성된다. 하지만, 우리는 생성자를 선언하지 않았다. 하지만 객체를 만들수는 있었다.

왜일까? 우리가 명시적으로 생성자를 선언하지 않아도 자동으로 default 생성자를 알아서 자바가 정의해준다. 물론 아무 기능을 하지 않는 생성자로도 마찬가지이다.

생성자의 정의는 일반 메소드를 정의하는 것과 같지만.

1.  반환값이 없다.
2. 생성자의 이름은 클래스의 이름과 정확히 같아야 한다.
3. 생성자는 매개변수에 따라 여러개가 정의 될수 있다.
4. public이라는 접근제어자여야 한다.

위의 Human은 아무 매개변수가 없는 Default 생성자가 자동으로 호출이 된 것이다.

아래 코드는 생성자를 통해서 객체를 초기화 시키는 방법을 보여준다.

class Human{
    String eyes="눈";
    String ears="귀";
    String nose="코";
    String mouth="입";
    public Human(){ 
        //default 생성자
    }
    public Human(String _eyes, String _ears, String _nose, String _mouth){
        eyes=_eyes;
        ears=_ears;
        nose=_nose;
        mouth=_mouth;
    }
    public void useEyes(){
        System.out.println(eyes+"으로 봄");
    }
    public void useEars(){
        System.out.println(ears+"로 소리를 들음");
    }
    public void useNose(){
        System.out.println(nose+"로 냄새를 맡음");
    }
    public void useMouth(){
        System.out.println(mouth+"로 욕을 함");
    }
}
 
 
public class Main {
 
    public static void main(String[] args){
        Human human=new Human("라식한 눈","귀","코털 삐져나온 코","험악한 입");
        human.useEars();
        human.useEyes();
        human.useMouth();
        human.useNose();
    }
}

위에서 생성자를 정의한 규칙대로 생성자를 정의해줬다. 그리고 default 생성자를 명시적으로 정의해 주었다.

그래서 생성자가 2개인 것이다.

객체를 생성할 때 2번째 있는 생성자로 객체를 초기화시켰다. 그렇다면 초기화된 데이터로 객체가 생성되었을지 결과를 확인해보자.

 

 

 

 

 

 

Object 클래스

우리는 단지 위 4개의 메소드만을 정의했다. 하지만 우리가 정의하지 않은 메소드들도 리스트에 나온다. 우리는 분명히 아래와 같은 hashCode, notify, wait과 같은 메소드들은 정의하지 않았다. 해당 내용이 무엇인지 알기 위해서는 우선 Object 클래스를 알아야한다.

사실 위의 메소드들은 Object클래스의 메소드들이다. 위의 메소드들들이 Object 클래스에 그대로 존재하고 있다는 것을 확인하고 있다.

허나 왜 Object 클래스의 메소드가 왜 내가 만든 클래스에 딸려 나오는 것이냐?
모든 클래스는 Object클래스를 자동으로 상속받게 된다.

상속(Inheritance)?
해당 내용은 아직 이야기 하지 않았다. 간단히 말해서 어떤 클래스의 변수와 메소드들을 물려받는다고 이해하자. 상속을 쓰게 되면 코드의 재활용이나 유지보수가 더욱 더 쉬워진다. 상속을 사용하는 방법은 클래스를 정의하기 전 중괄호 { 에서 extends 클래스명을 통해 이루어 진다.

그렇기 때문에 extends Object를 명시해주지 않아도, 우리는 Object클래스의 메소드를 사용할 수 있는 것이다.
모든 클래스는 Object 클래스를 상속 받는다는것을 기억하자.

 

출처 

https://reakwon.tistory.com/26

 

[JAVA] 자바 클래스(class) 기본 개념, 생성자와 상속

클래스(Class) 객체지향언어에서는 현실세계를 반영하기 위해 객체(Object)라는 개념을 도입하게 됩니다. 현실세계에서 보는 사람들, 자동차, TV 등이 객체지향언어에서는 객체로 표현이 됩니다. 클

reakwon.tistory.com

 

728x90

'[Java]' 카테고리의 다른 글

[웹개발] 웹스퀘어란?  (0) 2023.01.12
[Java] Collection이란?  (0) 2022.12.11
[Java] 동기, 비동기 방식 (Asynchronous processing model)  (0) 2022.12.08