반갑습니다!

[Kotlin] 자료형과 변수 본문

Kotlin

[Kotlin] 자료형과 변수

김덜덜이 2020. 4. 30. 23:38

자료형

기본적으로 Java에서 제공하는 자료형과 동일하다

논리 자료형

문자 자료형

기본 정수형

부호가 없는 정수형

실수형

변수의 선언

Kotlin에는 변수를 선언할 수 있는 방법이 2가지이다.

  • var 키워드를 사용해서 선언하면 변수의 값을 변경할 수 있다.
  • val 키워드를 사용해서 선언하면 변수의 값을 변경할 수 있다.

Kotlin에서는 다음과 같이 변수를 선언한다.

var variable: Int = 123 
var variable2: String = "Kotlin"

Kotlin은 컴파일러가 자료형을 추론할 수 있기 때문에 자료형을 생략할 수 있다.

var variable = 123  // 컴파일러가 Int로 추론
var variable2 = "Kotlin"  // 컴파일러가 String으로 추론
var variable3 = 12378561902873657123123 // 컴파일러가 Long형으로 추론
var variable4 = 123L // 접미사 L을 사용해 Long형으로 추론
var variable5 = 0x0F// 접미사 0x를 통해 16진 표기의 Int로 추론
var variable6 = 0b001// 접미사 0b를 통해 2진 표기의 Int로 추론

추가로 Kotlin에서는 숫자에 _ 를 넣음으로써 가독성을 증가시킬 수 있다.

val number = 1_000_000 // _를 사용했지만 정상적으로 실행된다

문자열

문자열의 경우 기본적인 자료형들과는 메모리 상에 표현되는 방식이 조금 다르다.

fun main() {
    var str1: String = "Hello"
    var str2 = "World"
    var str3 = "Hello"

    println("str1 == str2: ${str1 == str2}")
    println("str1 === str2: ${str1 === str2}")
    println("str1 == str3: ${str1 == str3}")
    println("str1 === str3: ${str1 === str3}")
}
/* 실행 결과
str1 == str2: false
str1 === str2: false
str1 == str3: true
str1 === str3: true
 */

Kotlin에서는 비교 연산자로 =====을 제공한다.

  • == : 값을 비교
  • === : 주소를 비교

위의 그림에서 str1과 str3은 값이 같은 것은 쉽게 이해할 수 있다. 결과를 잘 살펴보면 주소값까지도 동일하다는 것을 알 수 있는데, 이는 String의 동작 방식 때문이다. String은 Heap 영역에 할당된 'String Pool' 이라는 공간에 값이 할당된다. 그리고 문자열을 추가하거나 변경하는 경우 'String Pool'에 새로운 문자열을 할당하여 기존의 주소 값을 대체한다. 이는 동일한 문자열을 사용하는 변수가 다시 나온 경우 같은 주소를 가리킴으로써 메모리를 절약하기 위함이다.

var str: String = "Hello"
str = "Hello World"

위의 경우 str 변수의 값을 변경하였는데, 이는 'String Pool'에 새롭게 할당된 "Hello World"라는 값을 가리키도록 주소가 변경된 것이다. (String Pool 내부에 "Hello"는 그대로 남아있다)

기본형 ? 참조형?

기본형(Primitive Data Type)은 가공되지 않은 순수한 자료형을 말하며 프로그래밍 언어에 내장되어 있다. 참조형(Reference Type)은 객체를 생성하고 동적 공간에 데이터를 둔 다음 이것을 참조하는 자료형을 말한다. Java에서는 int, long, float, double 등 기본형과 String, Date와 같은 참조형을 모두 사용하지만 Kotlin에서는 코딩할 때는 참조형을 사용하여 변수를 명시하지만 이것은 Kotlin의 성능 최적화에 따라 JVM에 실행하기 위해 컴파일러에 의해 기본형으로 대체된다.

예시 코드

fun main() {
    val number: Int = 12345
    println("숫자 : $number")
}

/* 실행 결과
숫자 : 12345
*/

Kotlin에서는 ${변수 이름}을 사용해서 출력을 쉽게 할 수 있다.

fun main() {
    println("Byte : ${Byte.MIN_VALUE} ~ ${Byte.MAX_VALUE}")
    println("Short : ${Short.MIN_VALUE} ~ ${Short.MAX_VALUE}")
    println("Int : ${Int.MIN_VALUE} ~ ${Int.MAX_VALUE}")
    println("Long : ${Long.MIN_VALUE} ~ ${Long.MAX_VALUE}")
    println("Float : ${Float.MIN_VALUE} ~ ${Float.MAX_VALUE}")
    println("Double : ${Double.MIN_VALUE} ~ ${Double.MAX_VALUE}")
}
/* 실행 결과
Byte : -128 ~ 127
Short : -32768 ~ 32767
Int : -2147483648 ~ 2147483647
Long : -9223372036854775808 ~ 9223372036854775807
Float : 1.4E-45 ~ 3.4028235E38
Double : 4.9E-324 ~ 1.7976931348623157E308
*/

'Kotlin' 카테고리의 다른 글

[Kotlin] 함수  (0) 2020.06.09
[Kotlin] 비트 연산  (0) 2020.06.08
[Kotlin] 자료형의 변환  (0) 2020.06.03
[Kotlin] Null vs Non-Null  (0) 2020.05.01
[Kotlin] Introduction to Kotlin  (0) 2020.04.30