자바 개발자를 위한 코틀린 입문 - 3. 코틀린에서 Type을 다루는 방법


자바 개발자를 위한 코틀린 입문 에 강의 내용을 정리한 내용이다.
코틀린에서 Type을 다루는 방법에 대해서 설명한다.

기본타입

Byte, Short, Int, Long, Float, Double 부호 없는 정수들

1
2
3
4
val number1 = 3     // Int
val number2 = 3L // Long
val number3 = 3.0F // Float
val number4 = 3.0 // Double

kotlin은 기본 타입간의 변환은 명시적(to변환타입())으로 이루어 져야 한다.

1
2
3
4
5
6
7
8
9
10
val number1 = 4
val number2: Long = number1 // Type mismatch

// 변경
val number1 = 4
val number2: Long = number1.toLong()

// null 이 올수 있는 type
val number1: Int? = 4
val number2: Long = number1?.toLong() ?: 0L

타입 캐스팅

is, as

java에서 instanceOfis로 사용하고, 타입 캐스팅은 as를 사용한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
fun printAgeIfPerson(obj: Any) {
if (obj is Person) {
val person = obj as Person
println(person.age)
}
}

// 타입 캐스팅 as 생략가능한 스마트 캐스트
fun printAgeIfPerson(obj: Any) {
if (obj is Person) {
println(obj.age)
}
}

!is

!is를 붙여 타입 체크를 하면 반대의 오브젝트만 올수 있다.

1
2
3
4
fun printAgeIfPerson(obj: Any) {
if (obj !is Person) {
}
}

as?

as?를 이용해서 Object 앖이 null 인지를 체크 할 수 있다.

1
2
3
4
5
6
7
8
fun main() {
printAgeIfPerson(null)
}

fun printAgeIfAsPerson(obj: Any?) {
val person = obj as? Person
println(person?.age)
}

특이한 타입 3가지

Any

  • JAVA의 Object 역할
  • 모든 Primitive Type의 최상의 타입도 Any
  • Any 자체로는 null을 포함할 수 없어 null 포함하고 싶다면, Any?로 표현
  • Any에 equals / hashCode / toString 존재

Unit

  • Unit은 Java의 void와 동일한 역할
  • void와 다르게 Unit은 그 자체로 타입 인자로 사용 가능
  • 함수형 프로그래밍에서 Unit은 단 하나의 인스턴스만 갖는 타입을 의미. 즉, 코틀린의 Unit은 실제 존재하는 타입이라는 것을 표현

Nothing

  • Nothing은 함수가 정상적으로 끝나지 않았다는 사실을 표현하는 역할
  • 무조건 예외를 반환하는 함수 / 무한 루프 함수 등
1
2
3
fun fail(message: String): Nothing {
throw IllegalArgumentException(message)
}

String interpolation / String indexing

String interpolation

변수 이름만 사용하더라도 ${변수}를 사용

1
2
val age = 77
val log = "사람의 나이는 ${age} 입니다."

String indexing

""""""를 사용 하여 칸이동 등 자유롭게 문자사용 가능

1
2
3
4
5
6
7
8
9
10
val str = """
ABC
EFG
${age}
""".trimIndent()

// 출력
ABC
EFG
77

kotlin에서 문자열의 특정 문자 가져오기

1
2
val str = "ABC"
val ch = str[1] // A 출력

소스코드

참조