본문 바로가기

웹 프로그래밍/Spring Framework

[JAVA] this() 생성자(코드의 간결함을 위한!)

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 = "아파트";
}

이렇게 늘어날 것이다. 물론 알고리즘 상 이렇게 직접적으로 초기화 하는 것이 아주 조금 더 빠르겠지만 수 많은 코드를 생산해야하는 개발자로써는 생산성의 비효율이 굉장이 클 것이라 판단된다.