기본 생성자에 이름 있는 옵션 아규먼트를 사용하라

점층적 생성자 패턴

점층적 생성자 패턴은 프로퍼티별 디폴트 값을 가질 경우 파라미터별로 생성자를 각각 만드는 패턴이다.

class Foo{
 val size:Int
 val length: Int

   constructor(size: Int,length: Int){
        this.size=size
        this.length = length
     }

    constructor(size:Int): this(size,0)
} 

코틀린에서는 디폴트 아규먼트를 지정할 수 있기 때문에 해당 코드는 무의미하다. 이름 있는 아규먼트를 활용해서 명시적으로 이름을 붙여주면, 의미가 훨씬 명확하다.

빌더 패턴

자바에서는 이름 있는 파라미터와 디폴트 아규먼트를 사용할 수 없어, 빌더패턴을 사용한다. 빌더 패턴을 사용하면 파라미터의 순서를 원하는대로 지정할 수 있고, 파라미터에 이름을 붙일 수 있다.

빌터 패턴보다 이름있는 아규먼트의 장점

더 짧다.

빌더 패턴을 구현하려면 많은 코드를 입력해야한다.

더 명확하다.

객체가 어떻게 생성되는 지 확인하고 싶을때, 빌더 패턴은 내부 구현 메서드를 다 확인해야한다.

사용하기 쉽다.

기본생성자와 다르게 빌더 패턴은 언어 위에 추가로 구현한 개념이므로 추가 지식이 필요하다.

동시성과 관련된 문제가 발생하지 않는다.

빌더 팬턴에서 프로퍼티는 mutable로 스레드 안전하게 구현하기 어렵다

빌더 패턴으로 구현해야하는 경우

값의 의미를 묶어서 지정할 경우

AlertDialog.Builder() .setPositiveButton(R.string.fire,{d,id->...}) ....

특정 값을 누적하는 형태

Router.Builder() .addRoute(path="/",::showHome) .addRoute(path="/ysers",::showUsers)

위 케이스를 dsl로 구현하는 것도 가능하다. dsl 구현시 빌더 패턴보다 유연하고 명확해서 좋지만 개발하는데 시간이 더 소요된다.

Last updated