언어(Language)/Java

[Java] 자바의 this()와 this 개념 정리 및 차이점

잇트루 2022. 9. 14. 06:00
반응형

this()

메서드를 호출할 때, 같은 클래스 안에 메서드들끼리 서로 호출할 수 있었던 것처럼 생성자도 상호 호출이 가능하다. 이러한 경우 사용하는 것이 this() 메서드이다.

즉, this() 메서드는 자신이 속한 클래스에서 다른 생성자를 호출하는 경우에 사용한다.

 

예를 들어, Animal이라는 클래스가 존재한다 가정하면, Animal 클래스의 생성자를 호출하는 것은 Animal()이 아닌 this()로 호출이 가능하다.

 

this() 메서드를 사용하는 데에는 두 가지 조건이 있다.

  1. this() 메서드는 반드시 생성자의 내부에서만 사용할 수 있다.
  2. this() 메서드는 반드시 생성자의 첫 줄에 위치해야 한다.
public class Test {
    public static void main(String[] args) {
        Example example = new Example(5);
    }
}

class Example  {
    // 생성자1
    public Example() {
        System.out.println("기본 생성자 호출!");
    };
    // 생성자2
    public Example(int x) {
        this();
        System.out.println("두 번째 생성자 호출!");
    }
}

// 출력
// 기본 생성자 호출!
// 두 번째 생성자 호출!

위 코드의 경우, Example 클래스는 두 개의 생성자를 가지고 있다.

생성자2는 this() 메서드가 사용되고 있다.

생성자2를 사용하여 객체를 만들게 되면, 생성자2 안에 있는 this() 메서드가 실행되어 생성자1이 호출되고, 다음으로 두 번째 생성자가 호출된다.

 

this

this는 this() 메서드와는 전혀 다르게 사용된다. 자바 프로그래밍을 하다 보면, 인스턴스 변수와 매개 변수를 자주 사용하게 된다. 이때 변수 이름만으로는 인스턴스 변수와 매개 변수를 구분하기 어려워진다. 이러한 문제를 해결해 주는 것이 바로 this이다.

즉, this는 인스턴스 변수와 매개 변수를 구분 짓기 위해 사용한다.

public class ConstructorEx2 {
    public static void main(String[] args) {
        Animal dog = new Animal("dog", "멍멍");
        Animal cat = new Animal("cat", "야옹");

        System.out.println("동물 " + dog.getAnimal() + "의 울음소리 " + dog.getCry());
        System.out.println("동물 " + cat.getAnimal() + "의 울음소리 " + cat.getCry());
    }
}

class Animal {
    String animalName;
    String cry;

    Animal(String animal, String cry){
        this.animalName = animal;
        this.cry = cry;
    }
    String getAnimal() {
        return animalName;
    }
    String getCry() {
        return cry;
    }
}

위 예제를 살펴보면, Ainimal 클래스에서 선언한 인스턴스 변수와 Animal 생성자 안의 지역 변수가 존재한다.

만약 생성자 안에 this 키워드를 사용하지 않는다면, animalName과 cry는 생성자의 지역변수로 간주하게 된다.

모든 메서드에는 자신이 포함된 클래스의 객체를 가리키는 this라는 참조 변수가 존재한다. 일반적인 경우에는 this를 컴파일러에서 관리하기 때문에 생략하는 경우가 많다.

 

즉, this는 인스턴스 자신을 가리키며, 참조 변수를 통해 인스턴스의 멤버에 접근할 수 있는 것처럼 this를 통해 인스턴스 자신의 변수에 접근할 수 있는 것이다.

반응형