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
- hilt
- CollapsingToolbarLayout
- lifecycle
- View
- 백준
- LiveData
- ViewModel
- DataBinding
- CustomView
- Coroutine
- CoordinatorLayout
- room
- BOJ
- Navigation
- 안드로이드
- recyclerview
- Algorithm
- 코틀린
- Android
- 알고리즘
- onLayout
- onMeasure
- AppBarLayout
- activity
- Behavior
- kotlin
- HTTP
- 알림
- notification
- sqlite
Archives
- Today
- Total
개발일지
Kotlin in A..Z (5) - 자료형 비교, 검사, 변환 본문
Kotlin에서 자료형이 다른 변수끼리 연산할 수 없고, 연산을 하려면 형 변환을 거쳐야한다.
코드
val num1:Int = 123
val num2:Long = num1 //Long형에 Int형을 대입할 수 없음 Error
// Error : Type mismatch.
- 자동 형 변환
표현식에서 서로 다른 자료형을 연산하면 범위가 큰 자료형으로 Kotlin에서 형 변환을 해준다.
코드
val num1:Int = 123
val num2:Long = 321L
val num3 = num1 + num2 // Int + Long에서 Long이 더욱 큰 자료형이므로 Long으로 자동 형 변환
println(num3)
println(num3.javaClass) // 자료형을 확인하는 방법
결과
444
long
- 변환 메서드
변환 메서드를 통해 직접 형 변환을 할 수 있다.
메서드 | 자료형 | 메서드 | 자료형 |
toShort() | Short | toByte() | Byte |
toInt() | Int | toLong() | Long |
toUShort() | UShort | toUByte() | UByte |
toUInt() | UInt | toULong() | ULong |
toFloat() | Float | toDouble() | Double |
toChar() | Char | toString() | String |
코드
val num1:Int = 123
val str1:String = num1.toString() // num1을 String으로 변환
println(str1)
결과
123
- as에 의한 스마트 캐스트
as는 형 변환이 가능하면 캐스트하고 형 변환이 가능하지 않으면 ClassCastException를 throw한다.
상속관계에서 as에 의한 스마트 캐스트가 가능하다
※ : Any는 최상위 Class로 모든 Class는 Any클래스를 상속한다. (Java에서 Object와 비슷)
코드
val obj1: Any = 123
val str1: String = obj1 as String // Int형을 String으로 캐스트할 수 없음
println(str1)
결과
Exception in thread "main" java.lang.ClassCastException: class java.lang.Integer cannot be cast to class java.lang.String (java.lang.Integer and java.lang.String are in module java.base of loader 'bootstrap')
at MainKt.main(main.kt:3)
at MainKt.main(main.kt)
코드
val obj1: Any = "개발일지"
val str1: String = obj1 as String
println(str1)
결과
개발일지
- as?에 의한 스마트 캐스트
as?을 이용하여 스마트 캐스트할 때 null을 체크할 수 있다.
코드
val obj1: Any? = null
val str1: String? = obj1 as? String
println(str1)
val obj2: Any? = "개발일지"
val str2: String? = obj2 as? String
println(str2)
결과
null
개발일지
- 묵시적 형 변환
Any형은 모든 Class의 부모 클래스이기 때문에 무엇이든 될 수 있고, Any형 변수에 값을 대입할 때마다 묵시적으로 Kotlin이 형 변환을 해준다.
코드
var obj1: Any = 1
println(obj1.javaClass)
obj1 = "개발일지"
println(obj1.javaClass)
결과
class java.lang.Integer
class java.lang.String
- 자료형 검사
is 키워드
variable is 자료형 형식으로 Boolean 값을 반환한다.
코드
val str1:String = "개발일지"
println(str1 is String)
if(str1 is String) {
println("str1 is String")
}
else {
println("str1 is not String")
}
결과
true
str1 is String
variable.javaClass
runtime에서 Class의 형식을 저장하는 프로퍼티이다
코드
val str1:String = "개발일지"
println(str1.javaClass)
결과
class java.lang.String
'Kotlin (코틀린)' 카테고리의 다른 글
Kotlin in A..Z (7) - 함수 (0) | 2020.07.11 |
---|---|
Kotlin in A..Z (6) - 연산자 (0) | 2020.07.10 |
Kotlin in A..Z (4) - null (0) | 2020.07.10 |
Kotlin in A..Z (3) - 문자열 (0) | 2020.07.08 |
Kotlin in A..Z (2) - 자료형 (0) | 2020.07.08 |
Comments