코틀린에서 제네릭을 선언하는 방법은 주로 클래스, 인터페이스, 함수 등을 정의할 때 사용됩니다. 제네릭은 코드의 재사용성과 타입 안정성을 높이기 위한 강력한 기능입니다. 이를 위해 타입 파라미터를 사용하여 일반적인 형식으로 코드를 작성할 수 있습니다.
1. 클래스에서의 제네릭 선언
클래스에서 제네릭을 선언하는 방법은 다음과 같습니다.
class Box<T>(val item: T) {
// 클래스 내용
}
위의 예제에서 Box 클래스는 T라는 타입 파라미터를 가지고 있습니다. 이 클래스는 나중에 생성할 때 실제 타입으로 대체됩니다.
val intBox = Box(42) // Box<Int>
val stringBox = Box("Hello") // Box<String>
val doubleBox = Box(3.14) // Box<Double>
2. 함수에서의 제네릭 선언
함수에서도 제네릭을 선언할 수 있습니다.
fun <T> printItem(item: T) {
println(item)
}
위의 예제에서 printItem 함수는 어떤 타입의 인자든 받을 수 있도록 제네릭으로 선언되었습니다.
printItem(42) // 출력: 42
printItem("Hello") // 출력: Hello
printItem(3.14) // 출력: 3.14
3. 인터페이스에서의 제네릭 선언
인터페이스에서도 제네릭을 사용할 수 있습니다.
interface ListContainer<T> {
fun addItem(item: T)
fun getItem(index: Int): T
}
위의 예제에서 ListContainer 인터페이스는 T라는 타입 파라미터를 가지고 있습니다. 구현체에서 실제 타입으로 대체됩니다.
4. 제약된 제네릭 선언
타입 파라미터에 제약을 설정하여 특정 타입이나 인터페이스의 하위 타입만을 허용할 수 있습니다.
fun <T : Number> square(value: T): T {
return value * value
}
위의 예제에서 <T : Number>는 T가 Number 타입이거나 Number의 하위 타입이어야 한다는 제약을 나타냅니다.
5. 변성에 대한 제네릭 선언
변성은 제네릭 타입이 서브 타이핑 관계를 어떻게 유지할지를 결정합니다. in, out, inout 키워드를 사용하여 표시할 수 있습니다.
class Box<out T>(val item: T)
위의 예제에서 out 키워드는 T가 공변적이라는 것을 나타냅니다.
제네릭을 통해 코틀린은 유연하고 안전한 타입을 지원하며, 이는 코드의 가독성과 유지보수성을 향상시킬 수 있습니다.
With ChatGPT
'Kotlin > 포스팅' 카테고리의 다른 글
코틀린 타입 소거와 구체화 (0) | 2024.01.02 |
---|---|
코틀린 바운드와 제약 (0) | 2024.01.02 |
코틀린 타입 파라미터 (0) | 2024.01.02 |
코틀린 제네릭스 (0) | 2024.01.02 |
코틀린 인터페이스 봉인 (0) | 2024.01.02 |