컬렉션과 배열
코틀린의 컬렉션과 자바의 컬렉션 간의 관계에 대해 정리한다.
널 가능성과 컬렉션
타입 인자로 쓰인 타입에 ? 표시를 붙이면 널을 저장할 수 있다.
아래 예제에서는, List<Int?> 는 Int 나 null 을 저장할 수 있다.
1 | fun readNumbers(reader: BufferedReader): List<Int?> { |
“어떤 변수 타입의 널 가능성” 과 “타입 파라미터로 쓰인 타입의 널 가능성” 은 차이가 있다.
예를 들어,
- List<Int?> : 리스트 안의 각 값이 널이 될 수 잇다.
- List
? : 전체 리스트가 널이 될 수 있다.
읽기 전용과 변경 가능한 컬렉션
코틀린 컬렉션과 자바 컬렉션의 중요한 차이 중 하나는,
코틀린에서는 컬렉션 안의 데이터에 접근하는 인터페이스와 변경하는 인터페이스가 분리되었다는 점이다.
- kotlin.collections.Collection : 컬렉션 안의 데이터에 접근
- kotlin.collections.MutableCollection : 데이터 변경 (kotlin.collections.Collection 를 확장)
아래 코드에서, target 에 해당하는 인자로 읽기 전용 컬랙션을 넘길 수 없다.