본문 바로가기

Android 하나하나 집어보기

자바 Builder 클래스를 이용하자

Builder 클래스란?


Builder 클래스는 따로 정의가 있는것은 아니지만 클래스 생성자의 인자가 많을때 보기좋게 혹은 사용하기 좋게끔 생성자의 형태를 새롭게 바꾼 패턴이라고 보시면 됩니다.


바로 예를 들어볼까요? 예를들어 컴퓨터를 구성하는 클래스가 있다고 생각해봅시다. 그렇다면 그 클래스는 아래와 같을것 입니다.

class Computer {
String cpu;
String memory;
String gpu;
String mainBoard;
String cooler;
String power;
String ssd;

public Computer(String cpu, String memory, String gpu, String mainBoard, String cooler, String power, String ssd) {
this.cpu = cpu;
this.memory = memory;
this.gpu = gpu;
this.mainBoard = mainBoard;
this.cooler = cooler;
this.power = power;
this.ssd = ssd;
}
}

이 클래스는 7개의 인자를 받아야하는 경우가 생깁니다. 그냥 딱보기에도 느낌이 아...이거 초기화해서 쓰기 힘들겠다라는 느낌이 오실겁니다.


이상태로 main 메소드에서 호출해보도록 하겠습니다.

public class Main {

public static void main(String[] args) {

Computer computer = new Computer("intel","samsung","geforce",
"asrock","zalman","600","samsung");
}
}

다른 클래스에서 컴퓨터 클래스를 호출한다면 위와 같은 모습으로 호출해야합니다. 인자가 뭐가뭔지 알기도 힘들 뿐더러 가독성도 상당히 안좋습니다. 이런경우 우리가 지금부터 배워볼 Builder 클래스 작성하면 상당히 깔끔해집니다.


그럼이제 빌더클래스 작성법에대해서 알아보도록 하죠


첫번째 빌더클래스를 스태틱이너 클래스로 생성해줍니다. 그리고 변수들도 같이 선언해줍니다.

public static class Builder {
String cpu;
String memory;
String gpu;
String mainBoard;
String cooler;
String power;
String ssd;
}


두번째로 빌더클래스안에 각각의 변수들을 초기화할 메소드를 아래와 같이 만들어줍니다.

public Builder setCpu(String cpu){
this.cpu = cpu;
return this;
}
public Builder setMemory(String memory){
this.memory = memory;
return this;
}
public Builder setGpu(String gpu){
this.gpu = gpu;
return this;
}
public Builder setMainBoard(String mainBoard){
this.mainBoard = mainBoard;
return this;
}
public Builder setCooler(String cooler){
this.cooler = cooler;
return this;
}
public Builder setPower(String power){
this.power = power;
return this;
}
public Builder setSSD(String ssd){
this.ssd = ssd;
return this;
}


그리고 나서 빌더클래스를 인자로 받는 새로운 생성자를 만들어줍니다. 하지만 이때 생성자의 접근제어권자를 private로 작성하여서 바로 초기화 하는것을 막아줍니다.

private Computer(Builder builder){
this.cpu = builder.cpu;
this.memory =builder.memory;
this.gpu = builder.gpu;
this.mainBoard = builder.mainBoard;
this.cooler = builder.cooler;
this.power = builder.power;
this.ssd = builder.ssd;
}

위와같이 생성자를 작성하면 아래와같이 오류가나게 될것입니다. new를 통해 바로초기화 되는것을 막고 Builder클래스를 이용하도록 유도하기 위함입니다.


생성자까지만들었다면 다시 빌더클래스안에 Build()메소드를 아래와 같이 만들어줍니다.

public Computer build(){
return new Computer(this);
}

 

자이제 빌더클래스는 모두 작성이 끝났습니다. 메인메소드에서 어떻게 사용하는지 바로 보도록하겠습니다.

public static void main(String[] args) {

Computer computer = new Computer.Builder()
.setCpu("intel")
.setMainBoard("asrock")
.setGpu("geforce")
.setCooler("zalman")
.setSSD("samsung")
.setMemory("16GB")
.setPower("600")
.build();

}

메인메소드에서 위와같이 생성이 가능합니다. 상당히 보기좋게 클래스를 선언할 수 있습니다. 이것처럼 생성자의 인자가 많을때 빌더클래스를 이용하면 유지보수도 좋고 코드도 가독성이 상당히 좋아져서 코딩할때 유용합니다.


이상 빌더클래스의 포스팅을 마치도록 하겠습니다. 끝!!


ps.


비전공자 안드로이드 질문방을 운영중입니다. 

톡방링크 (링크) 를 통해 들어오시면 못다 설명드린내용들 자세히 설명드릴게요!!! 

이깟 블로그보다 직접만나서 배워보고 싶으시면 말리지 않습니다. 어서오세요 (링크)

마지막으로....제가 만든 앱 (링크) 입니다. 리뷰... 하나가 생명을 살립니다. 감사합니다.