프로그래밍 언어/코틀린

코틀린 4. 타입추론과 형변환

닉네임못짓는사람 2020. 12. 21. 02:33
반응형

이번 글에서는 코틀린에서의 타입추론과 형변환에 대해서 알아보도록 하겠습니다.

타입추론


타입추론이란 변수, 또는 함수를 선언할 때 그에 맞는 자료형을 명시해서 코딩하지 않아도

코틀린이 내부적으로 해당 변수와 함수에 맞게 자료형을 지정해주는 기능을 이야기합니다.

fun main() {
    var name: String = "홍길동"
}

예를 들어 위와 같이 name이라는 String형 변수를 "홍길동"이라는 문자열로 초기화하는 코드가 있다고 생각해봅시다.

여기서 우리는 변수를 선언함과 동시에 초기화를 해주고 있습니다.

 

이때 코틀린은 우리가 따로 자료형을 지정해 주지 않아도 해당 변수에 들어가는

데이터의 형태를 파악해서 변수의 자료형을 자동으로 지정해주는데, 이를 '타입추론'이라고 합니다.

fun main() {
    var name = "홍길동"
}

따라서 우리는 이 타입추론을 이용해 기존의 코드를 자료형을 명시하지 않는 이런 형태로 변경할 수 있습니다.

 

문자열뿐만 아닌 다른 자료형들도 확인해봅시다.

fun main() {
    var a = 123
    var b = 123L
    var c = 123.12
    var d = 123.12F
    var e = true
    var f = 'a'
}

이렇게 선언과 동시에 초기화를 하면, 코틀린의 타입추론 기능을 통해 자료형을 따로 명시하지 않아도 됩니다.

 

그렇다면, 선언 시에 초기화를 하지않으면 어떻게 될까요?

fun main() {
    var name
    name = "홍길동"
    println(name)
}

이렇게 변수 선언시에 자료형 지정과 초기화를 하지 않고 넘어간 뒤, 후에 변수를 초기화해서 출력해봅시다.

이 코드를 실행하면 위와 같은 오류 메시지가 발생합니다.

즉, 타입추론 기능을 사용하려면 변수를 선언함과 동시에 초기화해주어야 한다는 것입니다.

형변환


다음으로 형변환에 대해서 알아봅시다.

먼저, 형변환이란 특정한 변수에 지정된 자료형을 호환되는(해당 데이터를 저장할 수 있는)

다른 자료형으로 변경하는 것을 의미합니다.

 

예를 들어, Int형으로 지정된 변수를 Short나 Long형의 자료형으로 바꾸어 줄 수 있다는 뜻입니다.

코틀린에서 형변환을 하기 위해서는 특정한 함수들을 사용해야 하는데, 아래와 같은 것들이 있습니다.

1. toByte() : Byte로 변환

2. toShort() : Short로 변환

3. toInt() : Int로 변환

4. toLong() : Long으로 변환

5. toFloat() : Float으로 변환

6. toDouble() : Double로 변환

7. toChar() : Char로 변환

 

기존에 프로그래밍 언어를 배우신 분이라면 "명시적 형변환"과 "암시적 형변환"에 대해 알고 계실 텐데요.

모르는 분들을 위해 간단히 설명하자면

1. 명시적 형변환

 프로그래머가 직접 변경하려는 자료형을 지정해주는 것.

2. 암시적 형변환

 프로그래밍 언어가 코드에 맞게 적절한 자료형으로 형변환하는 것.

 

우리가 위에서 말한 형변환 방법들은 모두 "명시적 형변환"에 속합니다.

또한 코틀린에서는 "암시적 형변환"은 지원하지 않기 때문에 반드시 위와 같은 형태로 형변환을 해주셔야 합니다.

코드를 통해서 직접 형 변환을 해보도록 합시다.

fun main() {
    var a: Int = 65
    println(a)
    println(a.toChar())
}

위의 코드는 a라는 Int형 변수를 65로 초기화한 뒤, Char형으로 형변환한 코드입니다.

출력된 결과를 보면 a를 그냥 출력하면 65가 출력되고, 형변환 후 출력하니 A라는 문자가 출력되었습니다.

65라는 정수는 유니코드 상에서 A와 동일하기 때문에, Char형으로 형변환하니 A가 출력된 것입니다.

 

이러한 형변환을 사용할 때에는 꼭 주의해야 할 점이 있는데, 그것은 '데이터의 손실'입니다.

Int형으로 선언된 변수 a를 Int형의 최댓값인 2,147,483,647로 초기화해봅시다.

fun main() {
    var a: Int = 2147483647
}

이제 이 변수를 각각 Short형과 Long형으로 형변환해서 변수 b와 c에 입력해봅시다.

fun main() {
    var a: Int = 2147483647
    var b = a.toShort()
    var c = a.toLong()
    println(a)
    println(c)
}

그 뒤 값을 출력을 해보면 변수 c의 경우 a에 저장되어있던 데이터가 그대로 잘 옮겨진 것을 볼 수 있습니다.

fun main() {
    var a: Int = 2147483647
    var b = a.toShort()
    var c = a.toLong()
    println(a)
    println(b)
}

반면, 변수b를 출력한 결과 기존의 값인 2,147,483,647은 온데간데없고 -1이라는 숫자만 출력된 것을 볼 수 있습니다.

이는 본래 4Byte자료형인 Int의 최댓값을 Short형으로 변경해서 넣었기 때문에 데이터의 손실이 일어난 것입니다.

이러한 이유 때문에 형변환을 사용할 때에는 형변환 시에 데이터의 변조가 생기지 않을지 잘 생각해보고 작업하셔야 합니다.

 

이번 글은 이 정도로 마치도록 하겠습니다.

감사합니다.

반응형

'프로그래밍 언어 > 코틀린' 카테고리의 다른 글

코틀린 6. 함수  (0) 2020.12.21
코틀린 5. 배열  (0) 2020.12.21
코틀린 3. 변수와 자료형  (0) 2020.12.20
코틀린 2. 개발환경 구축  (0) 2020.12.20
코틀린 1. 코틀린 개요  (0) 2020.12.17