Kotlin

[Effective Kotlin] 코틀린에서 빌더를 사용할 필요가 있을까?

Hyung1 2021. 8. 28. 03:25
728x90
반응형

안녕하세요. 요즘 이펙티브 자바(Effective Java)를 읽어보고 있는데요, 읽다보니 코틀린은 이펙티브 자바가 대부분 반영이 되어있는 산물이라고 느꼈습니다.

 

보통 코틀린이 자바에 비해 훨씬 코드를 간결하게 작성할 수 있다는 것은 누구나 알고 있을텐데요, 구체적으로 어떤 어떤 사례들이 있는지 제가 이펙티브 자바를 읽으면서 한 번 분석하여 보았고, 직접 이펙티브 코틀린이라는 주제로 글을 작성해보고 있습니다.

 

그럼 Hyung1Jung의 Effective Kotlin 시작해보도록 하겠습니다.

[Effective Kotlin - Item2] : 코틀린에서 빌더를 사용할 필요가 있을까?

이번 글은 이펙티브 자바 Item2 읽어보며 이것이 코틀린라는 언어에서는 어떻게 녹여져 있을까에 관해 작성해보았습니다. 

 

이펙티브 자바 Item2을 읽어보면 "생성자에 매개변수가 많으면 빌더를 고려하라"라는 주제가 있습니다. 자세한 내용은 위의 링크를 읽어보시면 확인할 수 있습니다.

 

자바에서는 보통 빌터 패턴을 아래와 같이 씁니다.

@ToString
@Getter
@Setter
public class User{
    private String name;
    private String email;
    private Integer age;

    @Builder
    public User(String name, String email, Integer age){
        this.name = name;
        this.email = email;
        this.age = age;
    }
}
User user1 = User.builder()
    .name("Hyung1Jung")
    .email("Hyung1Jung@gmail.com")
    .age(18)
    .build();
User user2 = User.builder()
    .name("Hyung1Jung")
    .age(18)
    .build();

자바에서는 보통 아래와 같은 이유로 빌더 패턴을 사용합니다. 

 

매개변수를 늘려가는 점층적 생성자 패턴을 쓸 수는 있지만, 매개변수 개수가 많아지면 클라이언트 코드를 작성하거나 읽기가 어렵습니다. 코드를 읽을 떄 각 값의 의미가 무엇인지 헷갈릴 것이고, 매개변수가 몇 개인지도 주의해서 세어 보아야 합니다.

 

이것은 타입이 같은 매개변수가 연달아 늘어서 있으면 찾기 어려운 버그로 이어질 수 있습니다. 클라이언트가 실수로 매개변수의 순서를 바꿔 건네줘도 컴파일러는 알아채지 못하고, 결국 엉뚱한 동작을 하게 됩니다.

 

그래서 보통 Lombok을 통해 자동으로 생성해주는 Builder를 통해 객체를 생성해왔습니다.

 

하지만 코틀린에서는 위와 같이 롬복을 사용해서 @Builder를 사용할 필요가 없습니다. 왜 그럴까요?

class User(
    var name: String,
    var email: String?=null,
    var age: Int
)
val user = User(
    name="Hyung1Jung",
    email="Hyung1Jung@gmail.com",
    age=18
)
val user2 = User(
    name="Hyung1Jung",
    age=18
)

기본 생성자만으로도 값을 수정할 수 있고, 해당 컬럼에 기본값을 주게 되면 그 인자는 값을 할당해주지 않더라도 기본값이 들어가므로 생성 할 수 있게 되기 때문입니다.

728x90
반응형