데브허브 | DEVHUB | 코틀린 기초 문법 - 26일차 / generic 제레닉 in, out, where, *, :코틀린 기초 문법 - 26일차 / generic 제레닉 in, out, where, *, :
- Any는 코틀린의 모든 자료형을 받을 수 있는 최상위 슈퍼클래스입니다. 🌍
- Any는 유연하지만, 자료형이 언제든 바뀔 수 있어 예측 불가능하고 안전하지 않습니다. ⚠️
- 제네릭은 초기에는 자료형을 자유롭게 지정할 수 있지만, 한번 정해지면 해당 자료형으로 고정되어 타입 안전성을 확보합니다. 🔒
- 제네릭은 함수(매개변수, 반환값)와 클래스 멤버 변수에서 자료형을 유연하게 정의하고 고정하는 데 사용됩니다. 🛠️
- 제네릭 타입은 <T>와 같이 꺾쇠 괄호 안에 대문자로 표기하며, 한번 타입이 결정되면 해당 스코프 내 모든 제네릭 인스턴스가 그 타입으로 고정됩니다. 🎯
- 제네릭에
: SomeClass를 사용하여 특정 클래스나 인터페이스를 상속/구현하는 타입으로 제약을 둘 수 있습니다. ⛓️
where 절을 사용하면 여러 개의 제약 조건(예: 여러 인터페이스 구현)을 동시에 적용할 수 있어 더욱 복잡한 타입 제한이 가능합니다. 🧩
- 불변 (Invariance): 제네릭의 기본 동작으로, 지정된 자료형과 정확히 일치하는 타입만 허용합니다. 🚫
- 공변 (Covariance -
out): out 키워드를 사용하여 제네릭이 "반환"되는 위치(출력)에 있을 때, 지정된 타입의 상위 타입으로 대체될 수 있도록 허용합니다. (예: 볶음밥을 반환하지만 요리 타입으로 받을 수 있음) ⬆️
- 반공변 (Contravariance -
in): in 키워드를 사용하여 제네릭이 "매개변수"로 들어오는 위치(입력)에 있을 때, 지정된 타입의 하위 타입으로 대체될 수 있도록 허용합니다. (예: 야채를 매개변수로 받지만 감자를 넘길 수 있음) ⬇️
in과 out 키워드는 인터페이스나 클래스 정의 시 제네릭 타입 파라미터에 적용하여 타입 시스템의 유연성을 높입니다. 🔄