Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- Schedule
- cache
- generics
- GIT
- PyCharm
- android studio
- jvm
- Anaconda
- data class
- 크롤링
- fixedRateTimer
- 파이썬
- Kotlin
- 객체지향
- aging
- android studio 설치
- process
- thread pool
- sealed class
- 파이참
- InteliJ
- Android
- jsoup
- Android IDE
- 안드로이드
- 딥러닝
- HTML Parser
- 안드로이드 스튜디오
- 안드로이드 스튜디오 설치
- GC
Archives
- Today
- Total
탐비의 개발 낙서장
[Kotlin] 코틀린 제네릭(Generics)과 타입 파라미터 제약 본문
Geneics(제네릭)
클래스나 인터페이스 혹은 함수 등에서 동일한 코드로 여러 타입을 지원하게 해주는 기능
T는 타입 파라미터로, 클래스의 인스턴스를 생성할 때, type argument를 제공해야 한다.
class Box<T>(t: T) {
var value = t
}
1. <Int> 형태로 명시하는 방법이 있고
2. 생성자 등에서 추론 가능하게 하는 방법이 있다.
val box: Box<Int> = Box<Int>(1) // Using type argument
val box = Box(1) // Type Inferred
타입 파라미터 제약
클래스의 경우, 멤버 함수가 해당 타입에 대한 반복 또는 비교가 필요 할 경우
타입 파라미터에 제약을 걸어 줄 필요가 있다.
class Set<T>(elements: List<T>)
{
private var elements = mutableListOf<T>()
init {
elements.toMutableList()
this.elements = elements.distinct() as MutableList<T>
}
// ...
fun getSorted(): List<T> {
return elements.sorted()
}
}
상단의 코드를 실행하면, sorted() 함수에서 다음과 같은 에러가 발생한다.
sorted 함수는 Comparable을 상속받은 Type만 적용할 수 있기 때문에 발생하는 에러임.
class Set<T: Comparable<T>>(elements: List<T>)
{
private var elements = mutableListOf<T>()
init {
elements.toMutableList()
this.elements = elements.distinct() as MutableList<T>
}
// ...
fun getSorted(): List<T> {
return elements.sorted()
}
}
위와 같이 T에 Comparable 한정자를 지정해주면 비교 가능한 타입만 입력할 수 있게 되어 정상 실행 된다.
References
https://kotlinlang.org/docs/generics.html#variance 코틀린 제네릭 가이드
'프로그래밍 > Kotlin' 카테고리의 다른 글
[Kotlin] 코틀린 Timer (0) | 2021.08.02 |
---|---|
[Kotlin] 코틀린 함수형 프로그래밍 (0) | 2021.07.28 |
[Kotlin] 코틀린 객체지향 설계와 다양한 클래스 타입 (0) | 2021.07.27 |
[Kotlin] XML Parser 구현 (0) | 2021.07.26 |
[Kotlin] JSoup 이용 웹 크롤링 해보기 (0) | 2021.07.21 |