본문으로 바로가기

this

category Java/java 2020. 8. 5. 22:58

- 항상 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
		
	}
	
}

- 생성자함수에서 또다른 생성자 호출
- 한 곳에서 모든 곳을 관리한다.
- 유지보수성이 좋다.
- 문제가 발생해도 쉽게 발견할 수 있다.

반응형

'Java > java' 카테고리의 다른 글

상속  (0) 2020.08.10
배열 (Array)  (0) 2020.08.06
Class  (0) 2020.08.05
Method  (0) 2020.08.05
제어문  (0) 2020.08.04