this() 생성자
자기 자신의 다른 클래스를 호출하기 위한 생성자이다. 쓰이는 이유는 코드의 간결함 떄문, 자세한건 아래 예제를 통해 이해하자.
예제
package test;
import java.util.Scanner;
class House{
int price;
String dong;
int size;
String kind;
public House(){
this(100,32,"상계동","아파트");
}
public House(int price){
this(price, 32, "상계동", "아파트");
}
public House(int price, int size){
this(price, size, "상계동", "아파트");
}
public House(int price, int size, String dong){
this(price, size, dong, "아파트");
}
public House(int price, int size, String dong, String kind){
this.price = price;
this.size = size;
this.dong = dong;
this.kind = kind;
}
}
public class test {
public static void main(String[] args) throws Exception {
House house1 = new House();
System.out.println("PRICE : " + house1.price + ", SIZE : " + house1.size + ", DONG : " + house1.dong + ", KIND : " + house1.kind);
House house2 = new House(300);
System.out.println("PRICE : " + house2.price + ", SIZE : " + house2.size + ", DONG : " + house2.dong + ", KIND : " + house2.kind);
House house3 = new House(300, 10);
System.out.println("PRICE : " + house3.price + ", SIZE : " + house3.size + ", DONG : " + house3.dong + ", KIND : " + house3.kind);
House house4 = new House(300, 10,"홍은동");
System.out.println("PRICE : " + house4.price + ", SIZE : " + house4.size + ", DONG : " + house4.dong + ", KIND : " + house4.kind);
House house5 = new House(300, 10, "홍은동", "단독주택");
System.out.println("PRICE : " + house5.price + ", SIZE : " + house5.size + ", DONG : " + house5.dong + ", KIND : " + house5.kind);
}
}
결과
PRICE : 100, SIZE : 32, DONG : 상계동, KIND : 아파트
PRICE : 300, SIZE : 32, DONG : 상계동, KIND : 아파트
PRICE : 300, SIZE : 10, DONG : 상계동, KIND : 아파트
PRICE : 300, SIZE : 10, DONG : 홍은동, KIND : 아파트
PRICE : 300, SIZE : 10, DONG : 홍은동, KIND : 단독주택
해설
만약 this() 생성자가 없었다면. 위의 다양한 생성자를 선언하는 코드가 말도안되게 길어질 것이다.
예를 들어 빈 생성자를 선언한 이 코드는
public House(){
this(100,32,"상계동","아파트");
}
this()생성자를 사용하지 않는다면
public House(){
this.price = 100;
this.size = 32;
this.dong = "상계동";
this.kind = "아파트";
}
이렇게 늘어날 것이다. 물론 알고리즘 상 이렇게 직접적으로 초기화 하는 것이 아주 조금 더 빠르겠지만 수 많은 코드를 생산해야하는 개발자로써는 생산성의 비효율이 굉장이 클 것이라 판단된다.
'웹 프로그래밍 > Spring Framework' 카테고리의 다른 글
[JAVA] 상속(Extends) (0) | 2014.06.09 |
---|---|
[JAVA] 회원관리 시스템 / 응용 코드 (0) | 2014.06.08 |
[JAVA] new 생성자 (0) | 2014.06.08 |
[JAVA] 정적 메소드와 인스턴스 메소드(Static Method and Instance Method) (0) | 2014.06.08 |
[JAVA] 메소드 오버로딩(Method Overloading) (0) | 2014.06.08 |