230413 TIL #58 Builder 패턴

김춘복·2023년 4월 13일
0

TIL : Today I Learned

목록 보기
58/543
post-custom-banner

230413 Today I Learned

실전 프로젝트 2주차. 테스트 코드를 짜봤는데 여러 문제가 생겼었다. 테스트코드에 대한 공부가 좀 더 필요해 보인다. 오늘의 TIL에는 Builder 패턴에 대해 정리해보려 한다.


Builder 패턴

  • 문제 : 테스트 코드를 짜려니 테스트용 새 객체를 생성할 방법이 없었다.
    Entity에 생성자를 만드는 방법과 Setter는 제외했고, ReqeustDto에 생성자를 만들어서 하는 방법과 Builder 패턴을 적용하는 방법에 대해 고민했다.

Builder 패턴

Lombok 어노테이션인 @Builder 를 클래스나 생성자 위에 달면 편하게 빌더를 만들 수 있다.
만약 User Entity에 @Builder를 단다면 아래처럼 활용할 수 있다.

User user = User.builder()
				.name("김춘복")
                .password("1234")
                .address("우리집")
                .build()
  • Builder를 사용한다면 어떤 변수에 어떤 데이터를 넣어야 할지 가독성 있게 판별할 수 있고,
    객체가 Immutable(불변)하기 때문에 데이터를 아무나 바꿀 수 없다는 장점이 있다.
    그리고 순서에 상관없이 인수를 넣을 수 있다. 하지만 코드가 길어지는 단점이 있다.

  • 반면 생성자는 필드가 Setter에 의해 변경될 수 있다.
    생성자로 만들 때 넣어야 하는 인자가 많고 순서가 헷갈릴 수 있다면 Builder 패턴을 쓰는 것이 좋다. 그리고 builder보다 코드가 짧다.

  • 이런 장점에도 불구하고 Builder를 쓰지 않고 DTO에 생성자를 만들어서 쓰는 방법을 채택했다. Builder를 써야할 경우 거기에 맞는 생성자가 준비 되어 있어야 하는데 그걸 직접 Entity에 만들기 부담스러웠고, DTO에 @Builder를 쓰느니 그냥 DTO에 생성자를 만들어서 쓰는 것이 더 편하게 쓸 수 있기 때문이었다. 그리고 테스트 코드가 안그래도 긴데 builder까지 쓰면 너무 길어졌다.


profile
Backend Dev / Data Engineer
post-custom-banner

0개의 댓글