슬기로운슬기
Published 2023. 6. 22. 12:54
[TIL] @Builder study/study_spring

작성된 코드를 해석하다가 Builder에서 막혀버렸다... 빌더패턴이라고 하는데 잘모르겠어서 구글링하면서 다시 열심히 공부...ㅎ

 

 

@Builder

  • Lombok 라이브러리에서 제공하는 어노테이션
  • 자바클래스의 빌더 패턴을 자동으로 생성해주는 기능을 제공
  • 빌더패턴은 객체의 생성과 초기화를 유연하게 처리하기 위한 디자인 패턴, 복잡한 생성자를 대신하여 객체를 생성하는 방식

 

여기서 핵심은 

객체를 생성하는 방법이 생성자말고 빌더를 통해서 할 수 있다는 것이다. 

 

빌더를 사용하는 이유?

생성자는 파라미터가 많을 경우 가독성이 안좋아져서 생성자 대신 빌더를 사용하곤 한다. 

 

빌더의 특징

  • @Builder를 적용한 클래스는 불변객체로 만들 수 있다. 생성자 대신 빌더를 통해 객체를 생성하므로 생성된 객체의 상태를 변결할 수 없게 된다. 
  • 복잡한 객체 생성과정을 명확하게 표현할 수 있으며 빌더 매서드 체인 형태로 필드 값을 설정하므로, 가독성이 높아짐.
  • 필드 값을 선택적으로 설정할 수 있다. 필수적인 필드와 선택적인 필드를 구분하여 사용할 수 있으며, 사용하지 않는 필드는 자동으로 기본값으로 초기화한다.
  • 필드의 순서에 관계없이 빌더 메서드 체인을 통해 값을 설정하므로, 일관성 있는 객체 생성 코드를 작성할 수 있음

 

빌더 사용해보기 

[ 빌더 패턴을 적용할 객체에 @Builder 어노테이션 달기]

@Builder //빌더패턴으로 객체 생성
    public Article(String title, String content) {
        this.title = title;
        this.content = content;
    }
    
// entity > Article.java

[ Article을 참조하여 빌더 사용]

public Article toEntity() {
    return Article.builder()
            .title(title)
            .content(content)
            .build();
}

// DTO > AddArticleRequest.java
  • toEntity() : 빌더패턴을 사용해 DTO를 엔티티로 만들어주는 메서드를 작성 -> 글을 추가할 때 저장할 엔티티로 변환하는 용도로 사용될 예정 
  • .title(title) 과 .content(content)를 통해 빌더 메서드 체인을 사용하여 필드값 설정
  • .build() 메서드 호출하여 최종적으로 Article 객체를 생성하고 반환. 이때, Aritcle 클래스에서는 빌더패턴을 사용하므로 기본생성자가 아니라 빌더 패턴에 의해 객체가 생성된다. 

 

반응형
profile

슬기로운슬기

@스를기

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!