코틀린은 타입 안정성과 유연함 극대화에 대한 고민을 통해 만들어진 언어입니다. 이번 글을 통해 코틀린 제너릭이 무엇인지 알아보겠습니다.
제너릭 (Generic)
제너릭은 클래스 내부에서 사용하는 변수의 자료형을 외부에서 설정할 수 있도록 돕는 기법입니다. 아래의 코드를 보면 동일한 클래스 Phone 내의 version변수가 아이폰은 문자열, 갤럭시는 정수로 저장되는 것을 확인할 수 있습니다.
갤럭시의 버전이 항상 정수로 이루어져 있고 아이폰의 버전은 항상 문자열로 표시, 저장되어야 할 때(예시를 위한 가정) 이 상황에서 제너릭은 기존의 엄격한 타입 체킹의 제약에서 벗어나는 방법이 될 수 있습니다.
fun main() {
var iphone: Phone<String> = Phone("14ProMax")
var galaxy: Phone<Int> = Phone(23)
iphone.getVersion() // 14ProMax
galaxy.getVersion() // 23
}
class Phone<T>(version: T){
var version = version
fun getVersion(){
println(version)
}
}
함수에서도 활용 가능
함수에도 제네릭을 활용할 수 있습니다. 아래 코드는 정수와 문자열로 version을 다르게 받았음에도 정상적으로 실행됩니다.
fun main() {
println("Hello, world!!!")
getVersion(23) // 23
getVersion("14ProMax") // 14ProMax
}
fun <T> getVersion(version: T){
println(version)
}
반드시 T로 표현해야 하나요?
우리는 이러한 제너릭을 표현하기 위해 암묵적으로 T, U, V와 같은 방식으로 표현합니다. 반드시 T,U,V로 명시할 필요는 없습니다. 아래 코드도 문제 없이 실행됩니다.
class Phone<이반페리시치>(version: 이반페리시치){
var version = version
fun getVersion(){
println(version)
}
}
다음 글에서 in, out, where에 관해 설명하겠습니다.
'프로그래밍 > 안드로이드 <Kotlin>' 카테고리의 다른 글
[Gradle] unexpected element <property> found in <manifest><application> 문제 해결하기 (0) | 2023.09.17 |
---|---|
[Kotlin] 알고리즘 풀이를 위한 코틀린 코드 템플릿 (0) | 2023.08.23 |
[android] gradle 스크립트 파일에 대한 모든 이해 (0) | 2023.06.24 |
[Kotlin] 코틀린 Array 자료형 (0) | 2023.05.28 |
[Kotlin] 코틀린 Nullability (0) | 2023.04.16 |