일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 디자인패턴 #
- 함수형프로그래밍
- 빌터패턴
- F
- 프로토타입 패턴
- Design Pattern
- Kotlin
- r
- Observer Pattern
- Functional Programming
- Abstract Factory
- builderPattern
- ㅓ
- 디자인패턴
- 추상팩토리패턴
- ㅋㅁ
- 추상 팩토리
- a
- PrototypePattern
- factory method
- 옵저버 패턴
- Singleton
- 팩토리 메소드
- designPattern
- 싱글톤
- El
- 코틀린
- Today
- Total
목록Kotlin in Action (36)
오늘도 더 나은 코드를 작성하였습니까?
위임 프로퍼티 컴파일 규칙 class C { var prop: Type by MyDelegate() } val c = C() 컴파일러는 MyDelegate 클래스의 인스턴스를 감춰진 프로퍼티에 저장하며 그 감춰진 프로퍼티를 라는 이름으로 부른다. 프로퍼티를 표현하기 위해 KProperty 타입의 객체를 사용한다. 이 객체를 라고 부른다. class C { private val = MyDelegate() var prop: Type get() = .getValue(this, ) set(value: Type) = .setValue(this, , value) } val x = c.prop -------> val x = . getValue(c, ) c.prop = x -------> . setValue( c, ,..
위임 프로퍼티 컴파일 규칙 class C { var prop: Type by MyDelegate() } val c = C() 컴파일러는 MyDelegate 클래스의 인스턴스를 감춰진 프로퍼티에 저장하며 그 감춰진 프로퍼티를 라는 이름으로 부른다. 프로퍼티를 표현하기 위해 KProperty 타입의 객체를 사용한다. 이 객체를 라고 부른다. class C { private val = MyDelegate() var prop: Type get() = .getValue(this, ) set(value: Type) = .setValue(this, , value) } val x = c.prop -------> val x = . getValue(c, ) c.prop = x -------> . setValue( c, ,..
코틀린이 제공하는 관례에 의존하는 특성 중에 독특하면서도 가장 강력한 기능인 위임 프로퍼티 delegated property 다. 백킹 필드에 단순히 값을 저장하는 것보다 더 복잡한 방식으로 동작하는 프로퍼티를 쉽게 구현 가능하다. 그 과정에서 접근자 로직을 매번 재 구현할 필요도 없다. 자신의 값을 필드가 아닌 데이터베이스 브라우저 세션 맵 등에 저장할 수 있다. 위임이란 객체가 직접 작업을 수행하지 않고 다른 도우미 객체가 그 작업을 처리하게 하는 디자인 패턴이다. 이런 도우미 객체를 위임객체라 부른다. by 뒤에 있는 식을 계산해서 위임에 쓰일 객체를 얻는다. 프로퍼티 위임 객체가 따라야 하는 관례를 따르는 모든 객체를 위임에 사용 가능하다. class Delegate{ operator fun ge..
구조 분해 선언(destructuring declaration) 복합적인 값을 분해해서 여러 다른 변수를 한꺼번에 초기화할 수 있다. data class Point(val x: Int, val y: Int) fun main() { val p = Point(10,20) val (x, y) = p println(x) println(y) } 내부에서 구조 분해 선언은 관례를 사용한다. 구조 분해 선언의 각 변수를 초기화하기 위해 componentN이라는 함수를 호출한다. N은 구조 분해 선언에 있는 변수 위치에 따라붙는 번호다. val (a, b) = p ------> val a = p.component1() val b = p.component2() data 클래스의 주 생성자에 들어있는 프로퍼티에 대해서는 ..