일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 디자인패턴 #
- PrototypePattern
- Observer Pattern
- 빌터패턴
- 디자인패턴
- Functional Programming
- 팩토리 메소드
- 추상 팩토리
- ㅓ
- Singleton
- factory method
- Design Pattern
- designPattern
- 추상팩토리패턴
- Kotlin
- 싱글톤
- Abstract Factory
- El
- a
- 옵저버 패턴
- ㅋㅁ
- 코틀린
- r
- builderPattern
- F
- 함수형프로그래밍
- 프로토타입 패턴
- Today
- Total
목록Kotlin in Action/코틀린 답게 사용하기 (21)
오늘도 더 나은 코드를 작성하였습니까?
코틀린이 제공하는 관례에 의존하는 특성 중에 독특하면서도 가장 강력한 기능인 위임 프로퍼티 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 클래스의 주 생성자에 들어있는 프로퍼티에 대해서는 ..
컬렉션을 다룰 때 가장 많이 쓰는 연산은 인덱스를 사용해 원소를 읽거나 쓰는 연산과 어떤 값이 컬렉션에 포함되어 있는지 확인하는 연산이다. 인덱스로 원소에 접근: get set 코틀린에서는 인덱스 연산자도 관례를 따른다. 인덱스 연산자를 사용해 원소를 읽는 연산은 get으로 변환되고 원소를 쓰는 연산은 set으로 변환된다. data class Point(val x: Int, val y: Int) operator fun Point.get(index: Int): Int{ return when(index){ 0 -> x 1 -> y else -> throw IndexOutOfBoundsException("Invalid coordinate $index") } } fun main() { val p = Point(..
코틀린은 산술 연산자와 동일하게 원시 타입뿐 아니라 모든 객체에 대해 비교 연산을 수행할 수 있다. equals나 compareTo 를 호출해야 하는 자바와 달리 코틀린은 == 비교 연산자를 직접 사용할 수가 있어서 간결하게 코드를 작성할 수 있다. 동등성 연산자: equals class Point(val x: Int, val y: Int){ override fun equals(other: Any?): Boolean { if(other === this) return true // 최적화: 파라미터가 this와 같은 객체인지 확인. if(other !is Point) return false // 파라미터 타입을 검사한다. return x == other.x && y == other.y // 스마트 캐스트이..