객체 지향 프로그래밍에서 자기 자신을 나타내는 this라는 키워드에 대하여 살펴보도록 하겠습니다.
public class Person {
String name;
int age;
//1번
public Person() {
this("이름없음",1);
}
//2번
public Person(String name, int age) {
this.name = name;
this.age = age;
}
//3번
public void showPeorsonInfo() {
System.out.println(name +","+age);
}
}
-Person class를 만들고 name, age 두개의 멤버 변수를 선언한 후 생성자로 이용해 2개의 인스턴스를 구현하는 경우에 2번과 같이 자기자신을 가르키는 this. 외에도 1번 생성자 안에 this()처럼 2번 생성자를 호출하는 역할로 this를 사용할 수 있습니다.
-호출하는 생성자를 사용시 this()괄호안에는 2번 생성자에서 매개변수인 String name과 int age가 들어가야 되고 1번 생성자에서는 초기화값을 주기 위해 "이름없음"과 1을 입력해 주었습니다.
-결과를 확인해보기위해 name과 age를 출력해주는 showPersoninfo() 메서드를 3번에 작성하였습니다.
public class PersonTest {
public static void main(String[] args) {
Person personNoName = new Person();
personNoName.showPeorsonInfo(); //이름없음,1
Person personLee = new Person("이순신",10);
personLee.showPeorsonInfo(); // 이순신,10
}
}
public Person() {
age = 10
this("이름없음",1);
}
1번 생성자를 수정한 위의 문장은 "Constructor call must be the first statement in a constructor"라는 에러가 발생하는데 먼저 작성한 문장이 다른 생성자를 호출 할 경우 충돌이 생길 가능성을 예방하기 위한 에러입니다. 그렇기 때문에 호출을 위해사용하는 this()는 항상 첫문장으로 사용 되야 합니다.
public Person getSelf() {
return this;
}
Person 클래스에 자기 자신의 주소를 반환하는 getSelf 메서드를 작성하였습니다. 이때 반환되는 자료형은 클래스명으로 return 값에 this를 사용하게 됩니다.
package thisex;
public class PersonTest {
public static void main(String[] args) {
Person personNoName = new Person();
personNoName.showPeorsonInfo();
Person personLee = new Person("이순신",10);
personLee.showPeorsonInfo();
//2번
System.out.println(personLee); //thisex.Person@5305068a
//1번
Person p = personLee.getSelf();
System.out.println(p); //thisex.Person@5305068a
}
}