Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- 이분탐색
- 투 포인터
- 구현
- java
- CS
- BFS
- 시뮬레이션
- dfs
- 위상정렬
- Kotlin
- Effective Java
- 프로그래머스
- 유니온 파인드
- 에라토스테네스의 체
- 백준
- Network
- 알고리즘
- 스택
- 후니의 쉽게 쓴 시스코 네트워킹
- 문자열
- 수학
- JUnit 5
- 플로이드-와샬
- 완전탐색
- 그리디
- 동적계획법
- 세그먼트 트리
- 백트래킹
- mst
- swea
Archives
반갑습니다!
[Kotlin] 자료형의 변환 본문
명시적 형변환
코틀린에서는 자바에서 지원하던 묵시적 형변환을 지원하지 않는다. 때문에 명시적 형변환을 사용해야한다. 지원하는 형변환은 다음과 같다.
- toByte: Byte
- toLong: Long
- toShort: Short
- toFloat: Float
- toInt: Int
- toDouble: Double
- toChar: Char
스마트 캐스트
코틀린에서는 자바와 달리 변수를 선언할 때 자료형을 명시하지 않아도 된다는 특징이 있다. 이는 컴파일러에서 추론해서 자료형을 변환시켜주기 때문이다. Number형으로 정의된 변수에는 저장되는 값에 따라 정수, 실수 등으로 자료형이 변환된다.
var test: Number = 12.2 // 12.2에 의해서 Float으로 스마트 캐스트
println("$test") // 12.2
test = 12 // 12에 의해서 Int로 스마트 캐스트
println("$test") // 120
test += 12.0f // 12.0f에 의해서 Float으로 스마트 캐스트
println("$test") // 132.2
등호의 사용
코틀린에서는 등호를 사용한 비교를 2가지 방식으로 할 수 있다.
- == 값만 비교하는 경우
- === 값과 참조 주소를 비교하는 경우
자바에서는 == 연산을 통해 값과 참조 주소를 모두 비교하기 때문에 주의해야한다.
a와 b 모두 컴파일 과정을 거쳐 기본 자료형이 된다.val a = 128 val b = 128 pritnln(a == b) // true println(a === b) // true
val a: Int = 128
val b: Int? = 128
println(a == b) // true
println(a === b) // false
b는 Nullable한 변수이므로 컴파일 과정을 통해 기본형으로 변환되지 않고 객체가 된다. 따라서 a와 b의 참조 주소가 다르다.
val a: Int = 128
val b: Int? = a
val c: Int? = a
println(b == c) // true
println(b === c) // false
b와 c 모두 객체가 되므로 참조 주소가 다르다.
코틀린에서는 참조형으로 선언한 변수의 값이 -128 ~ 127 범위에 있으면 캐시에 그 값을 저장한다. 따라서 그 경우 참조형에 대한 비교 연산을 했을 때 같은 값이 나올 수 있다.
자료형의 검사
코틀린에서는 is
키워드를 사용해서 자료형을 검사할 수 있다.
fun main() {
var num:Number = 123
if(num is Int){
println("Int value : $num")
}
num = 123.5f
if(num !is Int){
println("number is not Integer : $num")
}
}
/*
* 실행 결과
* Int value : 123
* number is not Integer : 123.5
*/
Any
코틀린에서 Any는 모든 클래스의 루트가 되는 클래스이다. 자바에서 Object 클래스라고 생각하면 이해하기 쉽다. 따라서 스마트 캐스트를 사용하면 Any는 언제든지 필요한 자료형으로 변환할 수 있다는 특징이 있다.
fun main() {
var a: Any = 123
println("a: $a, type: ${a.javaClass}")
a = 123.4f
println("a: $a, type: ${a.javaClass}")
a = "Hello Kotlin!"
println("a: $a, type: ${a.javaClass}")
}
/*
* 실행 결과
* a: 123, type: class java.lang.Integer
* a: 123.4, type: float
* a: Hello Kotlin!, type: class java.lang.String
*/
'Kotlin' 카테고리의 다른 글
[Kotlin] 함수 (0) | 2020.06.09 |
---|---|
[Kotlin] 비트 연산 (0) | 2020.06.08 |
[Kotlin] Null vs Non-Null (0) | 2020.05.01 |
[Kotlin] 자료형과 변수 (0) | 2020.04.30 |
[Kotlin] Introduction to Kotlin (0) | 2020.04.30 |