실무에서 개발하다보면 코드 작성보다 리딩에 더 많은 시간을 쓰는 것을 알 수 있다.
협업이나 유지보수 방면에서 가독성이 좋은 코드를 지향하는 것은 개발자의 필수 교양이라고 생각한다.
당연한 얘기를 하는 것 같지만 오늘 다룰 builder 패턴과 관련이 있다.
디자인 패턴 중 생성 패턴에 해당 하며 생성 패턴에 속하는 패턴들은 객체를 생성, 합성하는 방법이나 객체의 표현 방법을 시스템과 분리해준다.
시스템과 분리에 포커스를 맞춰서 예시를 들자면
평소에 흔히 사용하는 생성자 패턴과 구현한 클래스가 아래와 같이 있다
@getter
@setter
public class Shield {
private int length;
private String color;
public Shield(int length, String color) {
this.length = length;
this.color = color;
}
}
public class ShieldImpl {
private int length =5;
private String color = "red";
Shield shield1 = new Shield(length, color);
Shield shield2 = new shield()
shield2.setColor(color)
shield2.setLength(length)
}
현재 2개의 param을 전달하지만
length,color,height,weight.. 등 param이 늘어날수록 가독성이 떨어지고 어떤 파라미터가 전달되는지 확인하기 쉽지 않다.
또한 setter를 사용하게된다면 코드상 의도파악과 객체의 일관성 유지에 좋지않다.
그렇기에 위 단점들을 보완하기위해
@builder 어노테이션을 사용하여 다음과 같이 빌더 패턴을 구현 할 수 있다.
@getter
@setter
public class Shield {
private int length;
private String color;
...
@builder
public Shield(int length, String color, ...) {
this.length = length;
this.color = color;
...
}
}
public class ShieldImpl {
private int length =5;
private String color = "red";
...
Shield shield = shield.builder()
.color(color)
.length(length)
...
.build()
}
이와같이 빌더 패턴을 구현하면 param주입이 명확하게 나타나고 있기에
코드 가독성이 증가하게된다.