Skip to content

Latest commit

 

History

History
47 lines (38 loc) · 2.93 KB

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

File metadata and controls

47 lines (38 loc) · 2.93 KB

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

  • 객체를 정의하고 생성하는 방법을 지 정할 때 사용하는 가장 기본적인 방법은 기본 생성자(primary constructor)를 사용하는 것입니다.
  • 생성자로 상태를 초기화한 뒤, 그 프로퍼티를 유지합니다.
  • 데이터 모델을 꼭 데이터 클래스로 정의하진 않아도 된다.
    • 다만, 데이터 클래스를 이용하면 해당 클래스가 내부에서 데이터로 쓰인다는것을 명확히 알 수 있다.
    • 또한, 데이터로 활용할 때 유용한 몇가지 함수를 제공한다.

점층적 생성자 패턴

여러가지 종류의 생성자를 사용하는 굉장히 간단한 패턴

  • 보기에 좋지 않으므로, 코틀린의 디폴트 아규먼트를 활용하여 생성하자.
  • 디폴트 아규먼트가 점층적 생성자 패턴보다 좋은 이유
    • 파라미터들의 값을 원하는대로 지정할 수 있음.
    • 아규먼트를 원하는 순서로 지정할 수 있음.
    • 명시적으로 이름을 붙여 아규먼트를 지정하므로 의미가 훨씬 명확.

빌더 패턴

자바에서는 이름있는 아규먼트와 디폴트 아규먼트를 사용할 수 없어, 대체로 빌더 패턴을 사용.

  • 빌더 패턴의 장점

    • 파라미터에 이름을 붙일 수 있음.
    • 파라미터를 원하는 순서로 지정할 수 있음.
    • 디폴트 값을 지정 가능.
  • 이름있는 아규먼트가 빌더패턴보다 좋은 이유

    • 더 짧다: 이름있는 아규먼트 생성자가 빌더패턴보다 구현하기 쉬움.
    • 더 명확: 빌더 패턴은 객체가 어떻게 생성되는지 보려면 여러 메서드를 확인해야 함.
    • 사용하기 더 쉬움
    • 동시성 문제가 없음: 코틀린의 함수 파라미터는 항상 이뮤터블이므로 동시성 문제가 없음.
  • 빌더패턴이 더 좋은 점.

    1. 여러 프로퍼티를 세팅하거나 누적하는 메서드로도 사용가능.
      • 다만, 코틀린에서는 이를 부정적으로 보며 DSL 사용을 권장.
    2. 팩토리로 사용가능함.
      • 코틀린에서도 팩토리처럼 사용하려면 커링이 되야하지만 코틀린은 지원하지 않음.
      • 그래서 data class로 정의하고 copy한 뒤 특정 프로퍼티만 수정하는 방식을 사용.
  • 코틀린에서는 빌더패턴을 거의 사용하지 않으며 다음 경우에만 사용.

    • 빌더 패턴으로 작성된 다른 언어를 그대로 옮길때
    • 디폴트 아규먼트와 DSL을 지원하지 않는 다른 언어에서 쉽게 사용할 수 있게 API를 설계할때

정리

  • 코틀린에서는 점층적 생성자 패턴을 사용하지 않음.
  • 디폴트 아규먼트는 더 사용하기 쉽고, 명확하고 짧음 -> 걍 사용하라는 내용.
  • 빌더 패턴도 거의 사용하지 않고, 기본 생성자를 사용하는 코드로 변경하거나 DSL 활용.