TIL

효준·2024년 11월 28일
0

11월 28일 목요일
AM 알고리즘 풀이
PM 과제 수행

💡 Today Issue

빌더와 생성자의 차이

🤔 나의 생각 + 배운 것

프로젝트를 하다보니 Dto에서 빌더와 생성자 둘 중 사용할 것을 고르는데 둘의 차이가 어떻고 어떤 상황에서 어떤 것을 선택해야하나 싶어서 찾아보았다.

생성자

  • 직관적이다

    • 생성자는 객체 생성을 위한 기본적인 방법이며 클래스 필드를 초기화하는데 사용된다.
  • 한정적이다

    • 생성자는 인자의 수와 타입이 고정되어 있어 일부 선택적인 속성들에 대해 유연성이 떨어진다.
  • 오버로딩을 통한 유연성

    • 여러 생성자를 정의함으로써 다양한 방법으로 객체를 생성할 수 있지만 여러 생성자가 존재할때 코드 가독성이나 유지보수가 힘들어질 수 있겠다.

Builder 패턴

  • 유연성
    • Builder 패턴은 객체를 생성시 더 많은 유연성을 제공한다.
      선택적인 매개변수가 많은 경우에 유용하며, 필요에 따라 여러 방식으로 객체를 구성할 수 있다.
  • 가독성
    • Builder 패턴은 메소드 체이닝을 사용하여 코드의 가독성을 높인다.
      이를 통해 각 매개변수의 역할이 더 명확하게 드러나며, 어떤 값이 설정되었는지 명확하게 확인할 수 있다.
  • 불변 객체
    • Builder 패턴을 사용하면 불변 객체를 쉽게 생성할 수 있다.
      빌더를 통해 모든 필수 필드를 설정한 후 불변 객체를 생성할 수 있다.
// 생성자 방식
public class User {
    private String name;
    private int age;

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
// Builder 패턴
public class User {
    private String name;
    private int age;

    private User(Builder builder) {
        this.name = builder.name;
        this.age = builder.age;
    }

    public static class Builder {
        private String name;
        private int age;

        public Builder setName(String name) {
            this.name = name;
            return this;
        }

        public Builder setAge(int age) {
            this.age = age;
            return this;
        }

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

// 사용 예
User user = new User.Builder()
                 .setName("Alice")
                 .setAge(30)
                 .build();

@builder 활용시

import lombok.Builder;

@Builder
public class User {
    private String name;
    private int age;
}

🕐회고

각자의 장점을 인지하고 상황에 맞게 적용해보도록 노력해야겠다.

profile
사진은 캣타워가 생겨 포효하는 고양이입니다.

0개의 댓글

관련 채용 정보