Java to Kotlin (14) - 배열과 컬렉션을 다루는 방법

이동명·2024년 6월 19일
0

kotlin

목록 보기
14/19
post-thumbnail

배열

사실 배열은 잘 사용하지 않습니다. 하지만 문법비교는 해보겠습니다.

아래는 자바코드 입니다.

코틀린에서는 아래처럼 사용합니다.

forEach 처럼 사용도 가능합니다.

코틀린에서의 Collection – List, Set, Map

컬렉션을 만들어줄 때 불변인지, 가변인지를 설정해야 한다.

아래는 코틀린 collection 계층도 입니다.불변과 가변 컬렉션이 나뉘어져 있습니다.

가변 (Mutable) 컬렉션 : 컬렉션에 element를 추가, 삭제할 수 있다.

불변 컬렉션 : 컬렉션에 element를 추가, 삭제할 수 없다.

(불변 컬렉션이라 하더라도 Reference Type인 Element의 필드는 바꿀 수 있습니다.)

List

jdk8에서는 아래와 같이 리스트를 생성하였습니다.

아래는 코틀린에서 리스트를 만드는 방식 입니다.

  • listof 를 사용해 불변리스트 생성 가능
  • 100,200 을 넣어서 int 로 타입이 추론되기 때문에 생략가능
  • 빈 리스트는 타입을 추론할 수 없기 때문에 필수로 작성

타입을 추론할 수 있는 경우에는 생략가능

아래는 자바에서 리스트를 활용하는 방법 입니다.

코틀린으로도 작성 해보겠습니다.

가변 리스트가 만들고싶다면 아래처럼 사용합니다.

우선 불변 리스트를 만들고, 꼭 필요한 경우 가변 리스트로 바꾸는게 효율적인 방법이 될 것 같습니다.

Set

  • 집합은 List와 다르게 순서가 없고,

  • 같은 element는 하나만 존재할 수 있다.

  • 자료구조적 의미만 제외하면 모든 기능이 List와 비슷합니다

사용하는 방법도 거의 같습니다.

가변 집합을 만드는 방법도 같습니다.

Map

자바에서 맵을 생성하는 코드 입니다.

코틀린에서는 아래처럼 활용합니다.

  • 타입을 추론할 수 없어, 타입을 지정
  • 가변 Map 이기 때문에 (key, value)를 넣을 수 있다.
  • Java처럼 put을 쓸 수도 있고, map[key] = value 을 쓸 수도 있다.
  • mapOf(key to value) 를 사용해 불변 map을 만들 수 있다

아래처럼 for문 활용가능합니다.

컬렉션의 null 가능성, Java와 함께 사용하기

? 위치에 따라 null의 가능성이 미묘하게 바뀐다.

  • List<Int?> : 리스트에 null이 들어갈 수 있지만, 리스트 자체는 절대 null이 아님

  • List? : 리스트에는 null이 들어갈 수 없지만, 리스트 자체는 null일 수 있음

  • List<Int?>? : 리스트에 null이 들어갈 수도 있고, 리스트 자체가 null일 수도 있음

Java는 읽기 전용 컬렉션과 변경 가능 컬렉션을 구분하지 않는다

  • 코틀린과 함께 사용시 불변 리스트를 가져가서 추가하고 다시 되돌려주면 에러를 반환할 수 있는 문제점이 있다.
  • Kotlin 쪽의 컬렉션이 Java에서 호출되면 컬렉션 내용이 변할 수 있음을 감안해야 한다.
  • 코틀린 쪽에서 Collections.unmodifableXXX()를 활용하면
    변경 자체를 막을 수는 있다!

Kotlin에서 Java 컬렉션을 가져다 사용할때도 플랫폼 타입을 신경써야 한다.


다음 포스팅에서는 다양한 함수를 공부해보도록 하겠습니다.

profile
Web Developer

0개의 댓글