제네릭(Generic)은 다양한 데이터 타입을 다룰 수 있는 코드를 작성하고자 할 때 사용되는 프로그래밍 개념입니다. 제네릭을 이용하면 데이터 타입에 관계 없이 유연하게 코드를 작성할 수 있고, 코드의 재사용성을 높일 수 있습니다. 코틀린에서도 제네릭을 지원하며, 이를 통해 안정성과 유연성을 동시에 확보할 수 있습니다.
제네릭 클래스 선언
코틀린에서 제네릭을 사용하려면 클래스나 함수를 선언할 때 타입 파라미터를 사용해야 합니다. 타입 파라미터는 일반적으로 알파벳 대문자로 표현되며, 다음과 같이 정의됩니다:
class Box<T>(t: T) {
var value = t
}
위의 예시에서 T
는 타입 파라미터를 나타내며, Box
클래스는 제네릭 클래스로 선언되었습니다. Box
클래스의 객체를 생성할 때마다 원하는 타입의 값을 전달할 수 있습니다.
제네릭 함수 선언
제네릭 함수를 선언하는 방법은 제네릭 클래스를 선언하는 방법과 유사합니다. 다음은 제네릭 함수를 선언하는 예시입니다:
fun <T> printItem(item: T) {
println("Item: $item")
}
위의 예시에서 printItem
함수는 제네릭 함수로 선언되었습니다. 함수 내부에서 T
타입 파라미터를 이용하여 다양한 타입의 데이터를 다룰 수 있습니다.
제네릭 제약(Constraint)
제네릭 클래스나 함수는 특정 타입의 제약을 가질 수 있습니다. 이는 where
키워드를 사용하여 특정 타입을 상속하거나 특정 인터페이스를 구현하는 타입만을 받도록 제한할 수 있습니다.
fun <T : Number> listItems(items: List<T>) {
for (item in items) {
println(item)
}
}
위의 예시에서 listItems
함수는 T
가 Number
클래스를 상속하는 타입으로 제한되어 있습니다.
제네릭은 코틀린에서 강력한 기능 중 하나로, 형식 안정성을 보장하고 코드의 재사용성을 높일 수 있습니다. 제네릭을 적재적소에 활용하여 보다 안전하고 유연한 코드를 작성할 수 있습니다.