일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- factory method
- Functional Programming
- 빌터패턴
- 함수형프로그래밍
- F
- 코틀린
- Singleton
- designPattern
- ㅋㅁ
- 추상 팩토리
- builderPattern
- Design Pattern
- Observer Pattern
- 프로토타입 패턴
- PrototypePattern
- 추상팩토리패턴
- r
- a
- 옵저버 패턴
- 디자인패턴
- El
- 디자인패턴 #
- Abstract Factory
- 싱글톤
- Kotlin
- 팩토리 메소드
- ㅓ
- Today
- Total
목록Kotlin in Action (36)
오늘도 더 나은 코드를 작성하였습니까?
변성의 개념은 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로만 볼 수 있다. 안에 원소가 ..
타입 파라미터 제약 - 클래스나 함수에 사용할 수 있는 타입인자를 제한하는 기능 예를 들어 List List에 원소의 합을 구하는 sum 함수를 생각해 보자. List같은 경우는 적용을 할 수가 없다. 이런 경우 sum 함수는 타입 파라미터로 숫자 타입만을 허용해야된다. 상한(upper bound) - 제네릭 타입을 인스턴스화할 때 사용하는 타입 인자는 반드시 그 상한타입 이거나 그 상한타입의 하위타입이여야 한다. fun List.sum(): T{ } 타입 파라미터 T에 대한 상한을 정하고 나면 T타입의 값을 그상한 타입의 값으로 취급할 수 있다 fun oneHalf(value: T): Double{ return value.toDouble() / 2.0 } 타입 파라미터를 제약하는 함수 선언하기 fun ..
제네릭스를 깊이 다루면서, 실체화된 타입 파라미터(reified type parameter) - 실체화된 타입 파라미터를 사용하면 인라인 함수 호출에 있어 타입 인자로 쓰인 구체적인 타입을 실행 시점에서 알수있다.(일반적인 클래스나 함수의 경우 타입 인자 정보가 실행 시점에 사라져버리기 때문에 이런것이 불가능하다.) 선언 지점 변성(declaration-site variance) - 선언 지점 변성을 사용하면 기저 타입은 같지만 타입 인자가 다른 두 제네릭 타입 Type Type가 있을때, 타입인자 A B 상위/하위 타입 관계에 따라 두 제네릭 타입의 상위/하위 타입관계 어떻게 되는지 지정할 수 있다. 예를 들면 List를 인자로 받는 함수에게 List타입의 값을 전달할 수 있을지 여부는 선언 지점 변성..