- 항상 instance method 의 첫 번째 매개변수로 존재하고 있다.
- 명시적 만들면 에러가 발생한다.
- 오직 사용만 할 수 있다.
- 자기자신의 객체를 접근하는 객체 래퍼런스 변수
- 객체를 구별해주는 역할
- 지역변수와 필드 이름이 같을 경우 명시적으로 구별하기 위해서 꼭 사용을 해야한다.
- 객체 자신에 대한 참조값을 갖는다
- 메소드 내에서만 사용된다
- 객체 자신을 메소드에 전달하거나 리턴해주기 위해 사용하기도 한다.
- 객체 생성자내에서 사용시 다른 생성자를 호출한다
- 같은 클래스에 오버로딩된 다른 생성자를 호출할 때에도 사용한다.
- 생성자는 instance method이기때문에 this가 존재함
public class ExThis{
private String name;
private int age;
public String getName(){
return name;
}
public int getAge(){
return age;
}
public void setName(String name){
this.name = name;
}
public void setAge(int age){
this.age = age;
}
public ExThis ThisReturn(){
return this;
}
}
Singleton Pattern
class Test{
private Test() {
System.out.println("This 생성자호출 ");
}
public static void Test2() { // 객체생성 대신 해줄수만 있는 메소드
Test t1 = new Test();
}
public static Test getObject() {
Test test = new Test();
return test; // 리턴을 안해주면 밑에서 사용 못함.
}
public void disp() {
System.out.println("disp");
}
}
public class ThisCall {
public static void main(String[] args) {
Test.Test2(); // 객체생성으로 Test()를 호출만 가능함. 사용 불가능
Test test = Test.getObject(); // 래퍼런스, 객체 생성. 계속 사용가능
test.disp();
}
}
this()
public class ThisCall2 {
private int a;
private int b;
public ThisCall2() {
// a = b = 0; // default 필드 초기화
this(0, 0);
}
public ThisCall2(int a) {
this(a, 0);
// this.a = a;
// b = 0;
}
public ThisCall2(int a, int b) {
this.a = a;
this.b = b;
}
public int getA() {
return a;
}
public int getB() {
return b;
}
public static void main(String[] args) {
ThisCall2 tc1 = new ThisCall2(); //12라인 생성자 호출
System.out.println(tc1.getA()); //0
System.out.println(tc1.getB()); //0
ThisCall2 tc2 = new ThisCall2(10); //15라인 생성자 호출
System.out.println(tc2.getA()); //10
System.out.println(tc2.getB()); //0
ThisCall2 tc3 = new ThisCall2(20, 30); //19라인 생성자 호출
System.out.println(tc3.getA()); //20
System.out.println(tc3.getB()); //30
}
}
- 생성자함수에서 또다른 생성자 호출
- 한 곳에서 모든 곳을 관리한다.
- 유지보수성이 좋다.
- 문제가 발생해도 쉽게 발견할 수 있다.
반응형