Hanbit the Developer

Effective Kotlin | 5장. 객체 생성 본문

Mobile/Kotlin

Effective Kotlin | 5장. 객체 생성

hanbikan 2023. 8. 8. 19:56

아이템 33: 생성자 대신 팩토리 함수를 사용하라

장점은 다음과 같다:

  • 함수에 네이밍 가능 → 가독성 확보(ex. ArrayList(3): 3이 무슨 의미일까? 의문 → ArrayList.withSize(3))
  • 다른 타입 리턴 가능(ex. listOf(): 각자의 플랫폼에서 다른 구현체를 반환할 수 있다.)
  • 싱글톤 사용 가능
  • 아직 존재하지 않는 객체 리턴 가능 → 빌드 이전에 코드에서 해당 타입을 사용할 수 있다는 뜻
  • 가시성 제어
  • inline, reified 사용 가능
  • 복잡한 객체 생성
  • 생성자와 달리 슈퍼클래스나 기본생성자를 호출하지 않아도 됨

팩토리 함수 유형

  1. companion 팩토리 함수
  2. 확장 팩토리 함수(fun Tool.Companion.createBigTool(): BigTool): companion 객체를 고칠 수 없을 때
  3. 톱레벨 팩토리 함수
  4. 가짜 생성자: fun MutableList(), operator fun invoke 활용(비추천)
  5. 팩토리 클래스의 메서드: 클래스의 상태를 활용하여 객체를 생성(ex. id를 증가시키면서 Student를 생성하는 StudentFactory)

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

점층적 생성자, 빌더 패턴 대신, 이름 있는 옵션 아규먼트를 사용한 기본 생성자와 DSL를 활용하라.

더 짧고 명확하고 사용하기 쉽기 때문이다.

아이템 35: 복잡한 객체를 생성하기 위한 DSL을 정의하라

다음과 같은 것을 표현하는 경우에 유용하다:

  • 복잡한 자료구조
  • 계층적인 구조
  • 거대한 양의 데이터

다만, 익숙하지 않은 경우 혼란과 어려움을 야기하므로 상황에 맞게 사용해야 한다.