일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 함수형프로그래밍
- ㅋㅁ
- designPattern
- Functional Programming
- El
- r
- PrototypePattern
- 옵저버 패턴
- ㅓ
- builderPattern
- Abstract Factory
- 코틀린
- Design Pattern
- a
- F
- Kotlin
- 빌터패턴
- factory method
- 싱글톤
- 프로토타입 패턴
- 추상팩토리패턴
- Singleton
- Observer Pattern
- 추상 팩토리
- 디자인패턴 #
- 팩토리 메소드
- 디자인패턴
- Today
- Total
목록Kotlin in Action/코틀린 답게 사용하기 (21)
오늘도 더 나은 코드를 작성하였습니까?
반공변 클래스의 하위 타입 관계는 공변 클래스의 경우와 반대이다. Comparator 인터페이스 살펴보기. interface Comparator{ fun compare(e1: T, e2: T): Int } 이 인터페이스는 T타입의 값을 소비하기만 한다. 따라서 타입 파라미터 앞에 in을 붙혀야 한다. 물론 특정 타입에 Comparator을 구현하면, 그 타입의 하위 타입에 속하는 모든 값을 비교할 수 있다. fun main() { val anyComparator = Comparator { e1, e2 -> e1.hashCode() - e2.hashCode() } val strings = listOf("a", "b", "c") strings.sortedWith(anyComparator) // 문자열과 같은..
List 인터페이스를 살펴보자. public interface List : Collection { // Query Operations override val size: Int override fun isEmpty(): Boolean override fun contains(element: @UnsafeVariance E): Boolean override fun iterator(): Iterator // Bulk Operations override fun containsAll(elements: Collection): Boolean // Positional Access Operations /** * Returns the element at the specified index in the list. */ pub..
변성의 개념은 List과 List와 같이 기저 타입이 같고 타입 인자가 다른 여러 타입이 서로 어떤 관계가 있는지를 설명하는 개념이다. 변성이 있는 이유 List 타입의 파라미터를 받는 함수에 List을 넘기면 안전할까? 자신있게 안정성을 보장할 수 없다. fun printContents(list: List){ println(list.joinToString()) } fun main() { val list = listOf("abc", "efg") printContents(list) } 위 경우는 잘작동 한다. 각 원소를 Any 타입으로 받아들이는데 String은 Any의 하위 타입이기 때문이다. 어떤 함수가 리스트의 원소를 추가하거나 변경한다면, 타입의 불일치가 생겨 불가능하지만, 원소의 추가나 변경이 없..
소거된 타입 파라미터와 실체화된 타입 파라미터 JVM의 제네릭스는 보통 타입 소거를 사용해 구현된다. 이것은 Runtime시 타입 인자 정보가 들어있지 않다 코틀린의 타입 소거가 실용적인 명에서 어떤 영향을 끼치고 함수를 inline으로 선언함으로써 이런 제약을 어떻게 우회할 수 있는지 살펴본다. 함수를 inline으로 만들면 타입 인자가 지워지지 않게 할 수 있다.(타입 실체화) 실행 시점의 제네릭스: 타입 검사와 캐스트 자바와 마찬가지로 코틀린 제네릭 타입인자 정보는 런타임에 지워진다. 제네릭 클랙스의 인스턴스는 인스턴스 생성시 쓰인 타입 인자에 대한 정보를 유지하지 않는다. List 을 생성 후 안에 String 객체를 여럿 넣더라도 실행 시점에는 그 객체를 List로만 볼 수 있다. 안에 원소가 ..