일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 추상 팩토리
- 팩토리 메소드
- PrototypePattern
- El
- a
- ㅋㅁ
- Abstract Factory
- r
- 프로토타입 패턴
- 코틀린
- Kotlin
- designPattern
- Observer Pattern
- 옵저버 패턴
- ㅓ
- 싱글톤
- 함수형프로그래밍
- builderPattern
- 디자인패턴
- F
- Functional Programming
- 빌터패턴
- 추상팩토리패턴
- Singleton
- Design Pattern
- Today
- Total
목록Kotlin in Action/코틀린 답게 사용하기 (21)
오늘도 더 나은 코드를 작성하였습니까?
타입 파라미터 제약 - 클래스나 함수에 사용할 수 있는 타입인자를 제한하는 기능 예를 들어 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타입의 값을 전달할 수 있을지 여부는 선언 지점 변성..
루프와 같은 명령형 코드를 람다로 변경한다면 return 문제에 부딪칠 것 이다. 루프의 중간에 있는 return문의 의미는 이해가 쉽다. 하지만, 루프를 filter와 같이 람다를 호출하는 함수로 변경후 인자로 전달하는 람다 안에서 return을 사용하면 어떻게 될까? 람다 안의 return 문 fun lookForAlice(people: List){ for (person in people){ if(person.name == "Alice"){ println("Found!") return } } println("Alice is not founded") } fun lookForAlice(people: List){ people.forEach{ if(it.name == "Alice"){ println("Fou..
컬렉션에 작용하는 코틀린 표준라이브러리 성능을 알아보자. 코틀린 표준라이브러리 컬렉션 함수는 대부분 람다를 인자로 받는다. 표준라이브러리 함수를 사용하는 것과 직접 구현하여 사용하는 것 무엇이 효율적일까? data class Person(val name: String, val age: Int) fun main() { val people = listOf( Person("Alice", 29), Person("Bob",31)) println(people.filter { it.age < 30 }) val result = mutableListOf() for (person in people){ if (person.age < 30) result.add(person) } println(result) } 코틀린 filt..