CS/JAVA

자바 - this와 생성자 오버로딩

reko_ 2022. 4. 6. 19:47

this는 클래스 밖에서 들어온 다른 인자와 클래스 멤버 변수의 이름이 같을 때 클래스 내의 멤버 변수를 지정할 수 있도록 하는 지시자입니다.

 

 

자바의 클래스에서 this는 다음과 같이 사용합니다.

 

public class Circle {
	int radius;
	public Circle() { this.radius = 1; }
	public Circle(int radius) { // 파라미터와 멤버 변수의 이름이 같음
		this.radius = radius;
	}
	double getArea() {
		return 3.14*this.radius*this.radius;
	}
	...
}

 

C에선 this-> 같이 포인터 지정자로 사용했지만 자바에선 this.멤버만 사용합니다.

 

 

 

자바에서 this는 생성자 안에서도 독특한 역할을 합니다.

 

생성자 오버로딩

 

하나의 클래스 내에 생성자의 이름이 같고 파라미터가 다른 여러 생성자가 있을 때 각기 다른 동작을 수행할 수 있게 하는 것을 생성자 오버로딩이라고 합니다.

 

여기서 this를 메소드 형식으로 사용하면 하나의 생성자 안에서 다른 생성자를 호출할 수 있습니다.

 

 

public class human {
	생성자1() {
		this(0,"")
	}

    생성자2(int old) {
        this(old, "")
    }

    생성자3(int old, String name) {
        this.old = old;
        this.name = name;
    }
}

human man1 = new human()
human man2 = new human(20)
human man3 = new human(30, Lee)

 

위와 같이 사용하면 생성자 1과 생성자 2에서 사용한 this의 파라미터로 어떤 다른 생성자를 호출했는지 확인하고 해당 생성자를 실해합니다.

 

 

man1은 생성자1을 호출하고 생성자 1은 다시 생성자 3을 호출하여 0과 ""를 넘겨 줄 것이고, man2는 생성자 2를 호출하고 생성자2는 다시 생성자 3을 호출하여 20과 ""값을 넘겨 멤버변수를 초기화 할 것입니다.

 

 

여기서 주의할 점은 this()로 생성자 내에서 다른 생성자를 호출할 때 this()는 생성자 내에서 첫번째 줄에 쓰여야 한다는 것입니다.