Langauge/Java-basic

[Java] this키워드와 this() 메서드

강잇 2022. 7. 21. 00:03

this. 키워드

  • 자신이 포함된 클래스의 객체를 가리키는 역할을 하며 this. 키워드를 통해 인스턴스 변수에 접근할 수 있다.
  • 일반적으로 키워드를 생략하면 컴파일러가 자동으로 추가한다.
  • 생략하면 컴파일러가 자동으로 추가하는데 그럼 언제 사용할까?
    -> 메서드를 선언한 후 매개변수와 인스턴스 변수의 이름이 동일할 때 구분하기 위하여 사용된다.
class Cat {
    String name;
    int age;
    double weight;
    
    public Cat(String name, int age, double weight) {
        // 생성자를 통해서 인스턴스를 초기화할 때 
        // 매개변수와 인스턴스 변수를 구분하기 위해 this. 키워드 사용
        this.name = name;
        this.age = age;
        this.weight = weight;
    }
}

this() 메서드

  • 자신이 속한 클래스에서 다른 생성자를 호출하는 경우에 사용.
  • 여러 개의 생성자를 정의할 때 생성자의 중복을 줄이기 위해 사용한다.
  • this() 메서드를 사용하기 위해서는 2가지 문법요소를 충족시켜야 한다.
    • this() 메서드는 반드시 생성자의 내부에서만 사용 가능하다.
    • this() 메서드는 생성자 내부의 첫 줄에 위치해야 한다.
// this() 메서드 사용 X
class Member {
    boolean isMember = false;
    String name;
    int age;
    String gender;
    // 회원이 정보 저장을 원하지 않을 경우
    public Member() {
        this.isMember = true;
    }
    // 이름만 저장
    public Member(String name) {
        this.isMember = true; // 위에서 작성한 기본 생성자와 동일
        this.name = name;
    }
    // 이름과 나이만 저장
    public Member(String name, int age) {
        this.isMember = true;
        this.name = name; // 생성자(String name)과 동일
        this.age = age;
    }
    // 모든 정보 저장
    public Member(String name, int age, String gender) {
        isMember = true;
        this.name = name;
        this.age = age; // 생성자(String name, int age)와 동일
        this.gender = gender;
    }
}

// this() 메서드 사용 O
class Member {
    boolean isMember = false;
    String name;
    int age;
    String gender;
    // 회원이 정보 저장을 원하지 않을 경우
    public Member() {
        this.isMember = true;
    }
    // 이름만 저장
    public Member(String name) {
        this(); // Member() 기본 생성자 호출
        this.name = name;
    }
    // 이름과 나이만 저장
    public Member(String name, int age) {
        this(name); // Member(String name) 생성자 호출
        this.age = age;
    }
    // 모든 정보 저장
    public Member(String name, int age, String gender) {
        this(name, age); // Member(String name, int age) 생성자 호출
        this.gender = gender;
    }
}