제네릭은 입력되는 값의 타입을 자유롭게 사용하기 위한 설계 도구다.
다음은 자주 사용되는 MutableList 클래스의 원본 코드를 이해하기 쉽게 변형한 코드다.
public interface MutableList<E> {
var list: Array<E>
...
}
클래스명 옆에 라고 되어 있는 부분에 String과 같은 특정 타입이 지정되면 클래스 내부에 선언된 모든 E에 String이 타입으로 지정된다. 결과적으로 var list: Array가 var list: Array으로 변경되는 것이다.
var list: MutableList<제네릭> = mutableListOf("월","화","수")
fun testGenerics() {
var list: MutableList<String> = mutableListOf() // String을 제네릭으로 사용했기 때문에 list 변수에는 문자열만 담을 수 있다.
list.add("월")
list.add("화")
list.add("수")
// list.add(35) 입력 오류가 발생 (Integer 타입이니까)
// String 타입의 item 변수로 꺼내서 사용 가능
for(item in list) {
Log.d("Generic", "list에 입력된 값은 ${item}입니다."
}
}