별의 공부 블로그 🧑🏻‍💻
728x90
728x170

검사와 자료형 변환

코틀린의 자료형 변환

  • 기본형을 사용하지 않고 참조형만 사용
  • 서로 다른 자료형은 변환 과정을 거친 후 비교
val a: Int = 1       // 정수형 변수 a를 선언하고 1을 할당
val b: Double = a    // 자료형 불일치 오류 발생
val c: Int = 1.1     // 자료형 불일치 오류 발생

 

  • 변환 메서드의 이용
val b: Double = a.toDouble()    // 변환 메서드 사용

 

  • 표현식에서 자료형의 자동 변환
val result = 1L + 3    // Long + Int -> 결과는 Long

 

변환 메서드의 종류

  • toByte : Byte
  • toLong : Long
  • toShort : Short
  • toFloat : Float
  • toInt : Int
  • toDouble : Double
  • toChar : Char

 

기본형과 참조형 자료형의 비교 원리

이중 등호(==)와 삼중 등호(===)의 사용

  • == : 만 비교하는 경우
    • 자바에서는 ==에서 참조 주소를 비교하므로 주의!
  • === : 참조 주소를 비교할 때
val a: Int = 128
val b: Int = 128
println(a == b)    // true
println(a === b)   // true

 

  • 참조 주소가 달라지는 경우
    • a는 기본형, b는 객체가 된다.
val a: Int = 128
val b: Int? = 128
println(a == b)    // true
println(a === b)   // false

 

이중 등호 비교와 삼중 등호 비교 사용하기

fun main() {
    val a: Int = 128
    val b = a
    
    val c: Int? = a
    val d: Int? = a
    val e: Int? = c
    
    println(c == d)
    println(c === d)
    println(c === e)
}
true
false
true

 

스마트 캐스트

  • 구체적으로 명시되지 않은 자료형을 자동 변환
    • 에 따라 자료형을 결정
    • Number 형(Int 형, Long 형 등)은 숫자를 저장하기 위한 특수한 자료형으로 스마트 캐스팅됨.
      • Number 형을 사용하면 숫자를 저장하기 위한 특수한 객체를 만든다.
      • 만약 어떤 값이 정수일 수도 있고 실수일 수도 있을 때, 즉 숫자 자료형을 결정하지 못할 때 Number 형을 사용할 수 있다.
      • String 형Number 형에 속하지 않으므로 변환할 수 없다.
fun main() {
    var test: Number = 12.2     // 12.2에 의해 test는 Float 형으로 스마트 캐스트
    println("$test")

    test = 12    // Int 형으로 스마트 캐스트
    println("$test")

    test = 120L    // Long 형으로 스마트 캐스트
    println("$test")

    test += 12.0f    // Float 형으로 스마트 캐스트
    println("$test")
}
12.2
12
120
132.0

 

자료형의 검사

is 키워드를 사용한 검사

fun main() {
    val num = 256

    if (num is Int) {    // num이 Int형일 때
        print(num)
    }
    else if (num !is Int) {    // num이 Int형이 아닐 때, !(num is Int) 와 동일
        print("Not a Int")
    }
}
256

 

묵시적 변환

Any

  • 자료형이 정해져 있지 않은 경우
  • 모든 클래스의 뿌리
    • IntStringAny 형의 자식 클래스이다.
    • Any 형은 모든 클래스의 슈퍼 클래스(Super Class)이다.
  • Any는 언제든지 필요한 자료형으로 자동 변환 (스마트 캐스트)
fun main() {
    var a: Any = 1    // Any 형 a는 1로 초기화될 때 Int 형이 됨.
    a = 20L    // Int 형이었던 a는 변경된 값 20L에 의해 Long 형이 됨.
    println("a: $a type: ${a.javaClass}")     // a의 자바 기본형을 출력하면 long이 출력됨.
}
a: 20 type: class java.lang.Long

 

Any 형으로 인자를 받는 함수 만들기
fun main() {
    checkArg("Hello")     // 문자열을 인자로 넣음.
    checkArg(5)    // 숫자를 인자로 넣음.
}

fun checkArg(x: Any) {    // 인자를 Any 형으로 받음.
    if (x is String) {
        println("x is String: $x")
    }
    if (x is Int) {
        println("x is Int: $x")
    }
}
x is String: Hello
x is Int: 5

 

참고 사이트

 

코틀린 프로그래밍 기본 1

부스트코스 무료 강의

www.boostcourse.org

 

728x90
그리드형(광고전용)
⚠️AdBlock이 감지되었습니다. 원할한 페이지 표시를 위해 AdBlock을 꺼주세요.⚠️
starrykss
starrykss
별의 공부 블로그 🧑🏻‍💻


📖 Contents 📖