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;
}
}