Null을 허용한 변수 검사
- 코틀린의 변수 선언은 기본적으로 null을 허용하지 않는다.
- val a: Int = 30
- var b: String = “Hello”
- Null 가능한 선언
- val a: Int? = null
- var b: String? = null
- NPE (NPE, NullPointerException)
- 사용할 수 없는 null인 변수에 접근하면서 발생하는 예외
Kotlin의 처리방법 비교
- Kotlin에서는 기본적으로 NotNull이고 Nullable 표현에만 ‘?’가 사용된다.
세이프콜과 non-null 단정 기호 활용
- 세이프 콜(Safe-call)
- str1?.length
- Non-null 단정 기호
- str1!!.length
자료형 비교, 검사, 변환
- 코틀린의 자료형 변환
- 기본형을 사용하지 않고 참조형만 사용한다.
- 서로 다른 자료형은 변환 과정을 거친 후 비교한다.
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 -> result는 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 |
- 참조 주소가 달라지는 경우
val a: Int = 128 // 기본형 val b: Int? = 128 // 객체 println( a == b ) // true println( a === b ) // false |
스마트 캐스트
- 구체적으로 명시되지 않은 자료형을 자동 변환
- 값에 따라 자료형을 결정된다.
- Number형은 숫자를 저장하기 위한 특수한 자료형으로 스마트 캐스트된다.
fun main() { var test: Number = 12.2 // 12.2에 의해 test는 Float형으로 스마트 캐스트 test = 12 // Int형으로 스마트 캐스트 test = 120L // Long형으로 스마트 캐스트 test += 12.0f // Float형으로 스마트 캐스트 } |
자료형 검사
- Is 키워드를 사용한 검사
fun main() { val num = 256 if( num is Int ) { // num이 Int형일 때 print(num) } else is ( num !is Int ) { // num이 Int형이 아닐 때, !(num is Int)와 동일 print(“Not a Int”) } } |
묵시적 변환
- Any
- 자료형이 정해지지 않은 경우
- 모든 클래스의 뿌리 – Int나 String은 Any형의 자식 클래스이다.
- Any는 언제든 필요한 자료형으로 자동 변환 (스마트 캐스트)