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
- 자료형이 정해져 있지 않은 경우
- 모든 클래스의 뿌리
- Int나 String은 Any 형의 자식 클래스이다.
- 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
참고 사이트
728x90
그리드형(광고전용)
'Programming > Kotlin' 카테고리의 다른 글
[Kotlin] 널(Null) (0) | 2022.08.28 |
---|---|
[Kotlin] 자료형과 변수 (0) | 2022.08.27 |
[Kotlin] InteliJ IDEA 살펴보기 & main() 함수 (0) | 2022.08.26 |
[Kotlin] 자바 JDK 설치하기 / 환경 변수 설정하기 (0) | 2022.08.26 |
[Kotlin] 코틀린의 개요 (0) | 2022.08.24 |
[Kotlin] 코틀린 한 눈에 알아보기 (0) | 2022.08.21 |
보일러플레이트(Boilerplate) (0) | 2021.04.05 |
함수에서 다양한 인자의 개수를 전달받기 (vararg 키워드) (0) | 2021.03.15 |