[KOTLIN] 일반적인 프로퍼티 패턴은 프로퍼티 위임으로 만들어라 (이펙티브 코틀린)

2022. 7. 13. 21:33·KOTLIN
728x90

프로퍼티 위임

  • 코틀린에서 제공하는 관례에 의존하는 특성 중 하나
  • 프로퍼티 위임을 사용하면 값을 뒷받침 하는 필드에 단순히 저장하는 것보다 더 복잡한 방식으로 작동하는 프로퍼티를 쉽게 구현 가능함
  • 일반적인 프로퍼티의 행위를 추출해서 재사용이 가능함

프로퍼티 위임 예시

var token: String? = null
	get() {
		print("token returned value $field")
		return field
	}
	set(value) {
		print("token changed from $field to $value")
		field = value
	}

var attempts: Int = 0
	get() {
		print("attempts returned value $field")
		return field
	}
	set(value) {
		print("attempts changed from $field to $value")
		field = value
	}

위임 프로퍼티 적용
----------------------------------------
var token: String? by LoggingProperty(null)
var attempts: Int by LoggingProperty(0)

private class LoggingProperty<T>(var value: T) {
	operator fun getValue(
		thisRef: Any?,
		prop: KProperty<*>
	): T {
		print("${prop.name} returned value $value")
		return value
	}

	operator fun setValue(
		thisRef: Any?,
		prop: KPRoperty<*>,
		newValue: T
	) {
		val name = prop.name
		print("name changed from $value to $newValue")
		value = newValue
	}
}
  • 일부 프로퍼티에서 사용될 때, getter / setter에서 로그를 출력한다고 가정
  • token, attempts 타입은 다르지만 내부적으로 같은 처리를 하고, 자주 반복되는 패턴이 보임
  • getValue, setValue 함수를 만들어서 객체를 만든뒤 by 키워드를 사용해서 연결
  • 프로퍼티 위임은 다른 객체의 메서드를 활용해서 프로퍼티의 접근자를 만드는 방식

정리

  • 프로퍼티 위임은 프로퍼티와 관련된 다양한 조작을 할 수 있고, 컨텍스트와 관련된 대부분의 정보를 가지는데 이러한 특징으로 인해 다양한 프로퍼티의 동작을 추출해서 재사용할 수 있음
저작자표시

'KOTLIN' 카테고리의 다른 글

[KOTLIN] 멤버 확장 함수의 사용을 피하라 (이펙티브 코틀린)  (0) 2022.07.27
[KOTLIN] 복잡한 객체를 생성하기 위한 DSL을 정의하라 (이펙티브 코틀린)  (0) 2022.07.20
[KOTLIN] 제네릭 타입과 VARIANCE 한정자를 활용하라 (이펙티브 코틀린)  (0) 2022.07.10
[KOTLIN] 타입 파라미터의 섀도잉을 피하라 (이펙티브 코틀린)  (0) 2022.07.10
[KOTLIN] 연산자 오버로드를 할때는 의미에 맞게 사용  (0) 2022.07.03
'KOTLIN' 카테고리의 다른 글
  • [KOTLIN] 멤버 확장 함수의 사용을 피하라 (이펙티브 코틀린)
  • [KOTLIN] 복잡한 객체를 생성하기 위한 DSL을 정의하라 (이펙티브 코틀린)
  • [KOTLIN] 제네릭 타입과 VARIANCE 한정자를 활용하라 (이펙티브 코틀린)
  • [KOTLIN] 타입 파라미터의 섀도잉을 피하라 (이펙티브 코틀린)
집한구석
집한구석
  • 집한구석
    tgyun615.info
  • 전체
    오늘
    어제
    • 카테고리 (183)
      • JAVA (38)
      • SPRING (15)
      • KOTLIN (23)
      • NETTY (1)
      • DEVOPS (3)
      • DOCKER (7)
      • KUBERNETES (2)
      • JAVASCRIPT (1)
      • SPLUNK (3)
      • ELK (7)
      • KAFKA (2)
      • GO (4)
      • ALGORITHM & DATA STRUCTURE (9)
      • IDE (5)
      • OS (16)
      • NETWORK (14)
      • GCP (2)
      • AWS (2)
      • DATABASE (10)
      • CLEANCODE (7)
      • OTHER (12)
  • 최근 글

  • 태그

    Elk
    클린코드
    Kafka
    이펙티브코틀린
    docker
    자바
    엘라스틱서치
    java
    JPA
    go
    cleancode
    SQL
    이펙티브 코틀린
    AWS
    ElasticSearch
    splunk
    IntelliJ
    프로그래머스
    Spring
    코틀린
  • 링크

    • github
    • linkedin
    • resume
  • hELLO· Designed By 정상우. v4.10.3
집한구석
[KOTLIN] 일반적인 프로퍼티 패턴은 프로퍼티 위임으로 만들어라 (이펙티브 코틀린)
상단으로

티스토리툴바