자바의 자료형은 크게 기본 자료형(primitive type)과 참조 자료형(reference type)으로 나뉜다.
하지만 코틀린에서는 자바와 달리 기본 자료형을 지원하지 않는다. 이는 코틀린 언어의 특성 때문인데 자바와 달리 코틀린은 null값을 가질 수 있기 때문이다.
그 이유를 알기 전에 먼저 기본 자료형과 참조 자료형에 대해 간단히 알아보자.
기본 자료형(Primitive type)은 값을 저장하는 가장 작은 단위로, 값 자체를 변수에 저장한다.
즉, 값 자체를 변수에 저장하기 때문에 '값이 없음'을 의미하는 null은 저장되지 않는다.
참조 자료형(Reference type)은 값이 저장된 메모리 주소를 가리키는 주소값을 저장하는 변수이다.
(C언어의 포인터를 생각하면 쉽다.)
즉, 값이 저장된 메모리의 주소값을 저장하기 때문에 null을 할당하면 어떠한 객체도 가리키지 않는 상태로 설정할 수 있다.
무언가 감이 오는가?
앞서 코틀린은 기본적으로 모두 null값을 가질 수 있다고 하였다. 때문에, null이 저장되지 않는 기본 자료형을 지원하지 않는다. 대신 boxed type을 이용하여 참조하는 것이다.
그렇다면 boxed type은 무엇일까.
boxed type은 기본 자료형(Primitive types)을 객체(Object)로 다루기 위한 개념이다.
즉, 기본 자료형의 값(value)을 갖는 객체(Object)를 말한다.
따라서, 코틀린에서는 Nullable 타입을 지원하기 위해 boxed type을 사용하고 있는 것이다.
이 포스팅에서는 가장 많이 사용하는 기본 자료형에 대해서만 소개한다.
이제부터 코틀린의 자료형을 알아보자.
1. 기본 자료형 (Primitive types)
코틀린에서는 기본 자료형을 제공하지 않는다.
대신 boxed type을 사용하는데 이는 자바에서 제공하는 Wrapeer 클래스와 유사한 개념으로, 기본 자료형을 객체로 감싸서 사용하는 방식이다.
더 자세히 설명하면 기본 자료형(primitive types)을 객체(object)로 다루기 위한 개념이다.
크게 정수형, 실수형, 논리형, 문자형, 문자열형 5가지로 나눌 수 있다.
1) 정수형
정수형은 크게 부호있는 정수형과 부호없는 정수형 2가지로 나뉜다.
부호있는 정수형
자료형 | 비트수 | 범위 | 기본 값 |
Byte | 8 | -128 ~ 127 | 0 |
Short | 16 | -32,768 ~ 32,767 | 0 |
Int | 32 | -2,147,483,648 ~ -2,147,483,647 | 0 |
Long | 64 | -9,223,372,036,854,775,808 ~ -9,223,372,036,854,775,807 | 0L |
부호없는 정수형
자료형 | 비트 수 | 범위 | 기본 값 |
UByte | 8 | 0 ~ 255 | 0u |
UShort | 16 | 0 ~ 65,535 | 0u |
UInt | 32 | 0 ~ 4,294,967,295 | 0u |
ULong | 64 | 0 ~ 18,446,744,073,709,551,615 | 0uL |
자바는 int가 기본 자료형으로, Integer가 참조 자료형으로 사용된다.
코틀린은 null값을 가질 수 있는 자료형을 사용하기 때문에 자바의 기본 자료형을 참조 자료형으로 대체하여 코틀린에서는 int가 기본 자료아닌 Int, double이 아닌 Double을 사용하는 것이다.
// 부호 있는 정수형
var num1: Byte = 42
var num2: Short = 64
var num3: Int = 543
var num4: Long = 4568L
// 부호 없는 정수형
var num5: UByte = 45u
var num6: UShort = 4164u
var num7: UInt = 25616u
var num8: ULong = 124582uL
2) 실수형
자료형 | 비트 수 | 범위 | 기본값 |
Float | 32 (4바이트) | 1.4E-45 ~ 3.4028235E38 | 0.0f |
Double | 64 (8바이트) | 4.9E-324 ~ 1.7976931348623157E308 | 0.0 |
float를 선언할 때는 할당하려는 값 뒤에 f를 붙여야 한다.
만약, 붙이지 않을 시 Double로 인식하기 때문에 Float으로 지정하기 위해서는 f를 붙여야 한다.
double의 경우 할당하려는 값 뒤에 아무 것도 붙이지 않아도 된다
다만, double 선언할 때는 소수점을 작성하여 실수형라는 것을 표현한다.
// 실수형
val num1 : Float = 10.0f
val num2 : Double = 10.0
3) 논리형
자료형 | 비트 수 | 범위 | 기본 값 |
Boolean | 1 | true, false | false |
논리형은 1bit의 크기를 가지며, true와 false 두 가지 값 중 하나를 가질 수 있다.
// 논리형
var yes : Boolean = true
var no : Boolean = false
4) 문자형
자료형 | 비트 수 | 범위 | 기본값 |
Char | 16 (2바이트) | 0~65535 (유니코드) |
문자형은 문자 하나의 값을 저장할 수 있으며, 작은따옴표(')로 문자를 나타낸다.
var text1 : Char = 'A'
5) 문자열형
자료형 | 비트 수 | 범위 | 기본값 |
String | 고정되어 있지 않음 | 제산 없음 | null |
문자열형은 문자열을 저장할 수 있으며 따옴표(")로 문자열을 나타낸다.
var str : String = "hello"
** 자료형 추론 **
자료형 추론은 변수를 선언할 때 자료형을 명시하지 않아도 자동으로 추론하여 자료형을 결정하는 것이다.
val x = 1 // Int 자료형으로 추론됨
val y = 3.14 // Double 자료형으로 추론됨
자료형을 생략할 수 있지만, 변수에 대입되는 값에 따라 자료형이 결정되기 때문에 초기화되는 값이 없는 경우에는 자료형을 명시해야 한다.
2. 참조 자료형 (Reference type)
참조 자료형은 기본적으로 null값을 가질 수 있으며, 객체를 참조하는 변수이다.
크게 8가지로, Any, Unit, Nothing, Array, Collection, List, Set, Map이 있다.
'Kotlin' 카테고리의 다른 글
[Kotlin] 코틀린 조건문 if-else 와 when 사용법 파헤치기 (0) | 2023.05.03 |
---|---|
[Kotlin] 코틀린 메소드 (Method) 선언하기 : 메소드 정의, 함수의 타입, 매개변수, 반환값 정의 방법 (0) | 2023.05.02 |
[Kotlin] 코틀린 연산자 (Operators)와 우선순위 (2) | 2023.04.08 |
[Kotlin] 코틀린 NULL (널) (0) | 2023.04.07 |
[Kotlin] 코틀린 변수 선언과 네이밍 (feat. property) (0) | 2023.04.03 |