[Programming Language]/[Kotlin]

[Kotlin] :: 데이터 타입(기초 타입, Char, String, Any, Unit, Nothing), 컬렉션 타입(Array, List, Set, Map)

Semincolon 2023. 10. 4. 23:38

◎ 데이터 타입

1) 기초 타입(Primitive type) - Int, Short, Long, Float, Double, Boolean, Byte

  다른 프로그래밍 언어에서 이미 많이 접했을 데이터 타입이다. 정수를 표현하는 Int, Short, Long과 실수를 표현하는 Float, Double과 2진수를 표현하는 Byte과 true, falst를 표현하는 Boolean이 있다. 이 중 Long 타입의 변수에 값을 할당할 때는 값 뒤에 'L'을 붙여주어야 하고 Float 타입의 변수에 값을 할당할 때는 값 뒤에 'F' 또는 'f'를 붙여주어야 한다.

2) 문자, 문자열 - Char, String

  - Char : 문자 타입

  Char 타입은 문자 하나를 표현하는 타입이다. 문자를 작은따옴표(')로 감싸서 표현해야 하고 큰따옴표(")를 사용하면 오류가 발생한다.

  - String : 문자열 타입

  String 타입은 문자열을 표현하는 타입이다. 문자열을 큰따옴표(") 또는 삼중 따옴표(""")로 감싸서 표현해야 하고 만약 삼중 따옴표를 사용한 경우에는 공백, 줄바꿈, 들여쓰기 등이 모두 문자열에 반영됨에 주의해야 한다.

    문자열 내에서 표현식을 사용하고자 할 땐 달러기호($)를 사용하면 된다.

3) 모든 타입 - Any

  Any는 코틀린의 최상위 클래스이다. 즉, 모든 타입의 상위 타입이므로 타입 지정을 Any로 하게 된다면 어떤 타입의 데이터도 대입할 수 있다는 것이다. 이는 보통 변수에 어떤 타입의 데이터가 들어올지 알 수 없을 때 사용한다.

4) 아무것도 반환하지 않는 타입 - Unit

  코틀린에서의 Unit은 자바에서의 void와 비슷하다. 즉, 반환 값이 없으므로 return을 하지 않아도 된다. 그러나 반환을 할 수도 있다. Unit 타입은 이름과 동일하게 오직 Unit 값 하나만을 가진다. 아래 코드를 보면 Unit 타입의 함수 some()이 Unit을 return하고 있는걸 확인할 수 있다.

  만약 Unit 타입의 함수에서 Unit이 아닌 데이터를 return하려 한다면 오류가 발생한다.

5) return 자체를 하지 않는 타입 - Nothing

  앞서 본 Unit은 return을 하지 않아도 되는 타입이었다면 지금 볼 Nothing은 return 자체를 하지 않는 타입이다. Nothing 타입의 함수는 실행이 끝나도 호출 코드로 다시 복귀하지 않는다. 즉, Nothing은 '정상적으로 종료되지 않음'을 뜻한다. 이말은 즉슨 의도적으로 예외를 발생시킨다는 것이다.

 

◎ 컬렉션 타입

1) Array

  첫번째로 볼 컬렉션 타입은 다른 프로그래밍 언어에서 많이 접했던 Array(배열)이다. 배열의 크기는 한번 선언된 이후 수정이 불가하다. 코틀린에서 배열을 선언하는 방법에는 여러가지가 있다. 

  • Array<T>(크기, {초깃값}) : 배열의 타입, 크기, 초깃값을 설정하는 방법

  • 기초타입Array(크기, {초깃값}) : 기초타입 배열의 크기, 초깃값을 설정하는 방법

  이 방법에서 초깃값을 생략할 수도 있는데 그럼 숫자 배열의 경우에는 초깃값 0이, Boolean 타입 배열의 경우에는 초깃값 false가 들어간다.

  • arrayOf<T>(값1, 값2, 값3, ...) : 배열의 타입 및 값을 하나씩 설정하는 방법

 

  배열의 값을 설정하는 방법은 인덱스를 사용하는 방법과 set() 함수를 사용하는 방법이 있고 배열의 값을 얻는 방법은 인덱스를 사용하는 방법과 get() 함수, withIndex() 함수를 사용하는 방법이 있다.

2) List, MutableList

  List는 순서가 있는 데이터의 집합이고 같은 데이터의 중복이 허용되는 자료형이다. List와 MutableList의 차이는 추후에 값을 변경할 수 있느냐 없느냐에 있다. Mutable의 뜻은 '변할 수 있는'으로 추후에 값의 변경이 가능하다. 뒤에서 볼 Set와 Map역시 MutableSet와 MutableMap이 존재하는데 의미는 List와 동일하다. 허나 대부분의 경우에는 추후 값의 변경이 가능한 Mutable 타입을 사용한다.

  • listOf<T>(값1, 값2, 값3, ...) : 추후 값의 변경이 불가능한 리스트로, 타입과 값을 설정. 제네릭은 생략 가능
  • mutableListOf<T>(값1, 값2, 값3, ...) : 값의 변경이 가능한 리스트. 나머지는 listOf()과 동일.

  리스트의 값을 변경할 때는 배열과 마찬가지로 인덱스를 사용하는 방법과 set() 함수를 사용하는 방법이 있다. 마찬가지로 값을 획득할 때 역시 인덱스get(), withIndex() 함수를 사용할 수 있다. 또한 새로운 값을 추가할 때는 add() 함수를 사용한다. listOf() 함수를 사용하여 선언한 리스트는 add() 함수와 값의 변경이 불가하다. 리스트의 값을 제거할 때는 remove(), removeAt() 함수를 사용한다.

3) Set, MutableSet

  Set은 데이터의 중복을 허용하지 않는 리스트라고 볼 수 있다. 값을 추가할 때는 리스트와 동일하게 add() 함수를 사용하고 값을 제거할 때는 remove() 함수를 사용한다. 그러나 인덱스로 값을 획득할 수는 없고 get() 함수 또한 사용 불가하다. Set은 중복을 허용하지 않으므로 만약 추가하려는 값이 이미 Set에 존재하는 값이라면 추가되지 않는다.

  • setOf<T>(값1, 값2, 값3, ...) : 값의 변경이 불가한 Set
  • mutableSetOf<T>(값1, 값2, 값3, ...) : 값의 변경이 가능한 Set

4) Map, MutableMap

  Map은 키(key)와 값(value)이 하나의 데이터를 이루는 자료형이다. 하나의 쌍을 이루는 방법으로는 Pair() 객체를 사용하는 방법과 to 키워드를 사용하는 방법이 있다. 값을 추가할 때는 put() 함수를 사용하고 획득할 때는 get() 함수를 사용하며 값을 삭제할 때는 remove() 함수를 사용한다.

  • mapOf<T>(키1 to 값1, Pair(키2, 값2), ...) : 값의 변경이 불가한 Map
  • mutableMapOf<T>(키1 to 값1, Pair(키2, 값2), ...) : 값의 변경이 가능한 Map