본문 바로가기
Java & Kotlin/Kotlin

[Kotlin] Type을 다루는 방법

by heekng 2022. 7. 5.
반응형

Type을 다루는 방법

기본타입

val number1 = 3
// 명시적으로 타입을 변환해야 한다.
val number2: Long = number1.toLong()

// nullable 의 경우에는 적절한 처리가 필요하다.
val number1: Int? = 3
val number2: Long = number1?.toLong() ?: 0L
  • 코틀린에서는 선언된 기본값을 보고 타입을 추론한다.
    • 3: Int, 3L: Long, 3.0: Double, 3.0f: Float
  • Java에서 기본 타입간의 변환은 암시적으로 이루어지지만 (int <-> Integer)
  • Kotlin에서는 기본 타입간의 변환은 명시적으로 이루어져야 한다.
    • 그렇기 때문에 toLong()과 같이 명시적 형변환이 필요하다.

타입 캐스팅

fun printAgeIfPerson(obj: Any) {
    if (obj is Person) {
        // 스마트 캐스트
        // 이미 Person 타입인지 확인했기 때문에 바로 name 사용 가능
        println(obj.name)
    }
}

fun printAgeIfPersonNullable(obj: Any?) {
    val person = obj as? Person
    println(person?.name)
}
  • is: Java의 Instance of 와 같은 역할을 한다.
  • !is: isnot
  • as: object as Person의 형태로 형변환을 한다.
  • as?: objectnullable일 경우 object as? Person의 형태로 Person을 형변환하며, null일 경우 null으로 입력된다.

Kotlin의 3가지 특이한 타입

  • Any
    • Java의 Object 역할을 한다. (모든 객체의 최상위 타입)
    • 모든 Primitive Type의 최상위 타입도 Any이다.
    • Any 자체로는 null을 포함할 수 없기 때문에 null을 포함하고 싶다면 Any?로 표현한다.
    • Any는 equals, hashCode, toString이 존재한다.
  • Unit
    • Java의 void와 동일한 역할을 한다.
    • void와 다르게 Unit은 그 자체로 타입 인자로 사용 가능하다.
    • 함수형 프로그래밍에서 Unit은 단 하나의 인스턴스만 갖는 타입을 의미한다.
    • 즉, 코틀린의 Unit은 실제 존재하는 타입이라는 것을 표현한다.
  • Nothing
    • Nothing은 함수가 정상적으로 끝나지 않았다는 사실을 표현하는 역할이다.
    • 무조건 예외를 반환하는 함수, 무한 루프 함수 등에 사용한다.

String Interpolation, String indexing

val person = Person("heekng")
val name = person.name

println("이름: ${person.name}")
println("이름: $name")

// 여러 줄의 문자열
val str = """
    ABC
    EFG
    ${name}
""".trimIndent()
println(str)

// 특정 문자 가져오기
val str2 = "ABC"
println(str2[0])
println(str2[2])
  • ${변수}형태로 문자열 중간에 변수를 넣을 수 있다.
    • 또는 바로 사용할 수 있는 변수라면 $변수형태로도 사용할 수 있다.
    • 변수 이름만 사용하더라도 ${변수}형태로 사용하는 것이 가독성, 일괄 변환, 정규식 활용 측면에서 더 좋다.
  • 여러 줄의 문자열을 작성해야 할 때 """를 사용할 수 있다.
  • 문자열에서 문자를 가져올 때, Java의 배열처럼 []를 사용한다.
반응형