-
[kotlin] 코틀린 자료형2kotlin/kotlin 공부 2019. 6. 29. 16:08
코틀린은 변수를 사용할 때 반드시 값이 할당되어 있어야 한다는 원칙이 있습니다.
값이 할당되지 않은 변수를 사용하면 오류가 발생합니다.
값이 없는 상태는 null 이라고 합니다.
코틀린은 기본적으로 null을 사용하지 않도록 되어 있으나 null 을 허용하려면 자료형 뒤에 ?(물음표) 기호를 붙여서 선언하면 null 을 허용할 수 있습니다.
ex) var str1 : String? = "hello kotlin"
str1 = null
println(str1)
☆ safe call : null 이 할당되어 있을 가능성이 있는 변수를 검사하여 안전하게 호출하도록 도와주는 기법
표시 방법 : ?.
사용 방법 :
1println("str1 : $str1 str1.length: ${str1?.length}")cs ☆ non-null 단정 기호 : non-null 단정 기호는 변수에 할당된 값이 null이 아님을 단정하므로 컴파일러가 null 검사 없이 무시합니다. 따라서 변수에 null 이 할당되어 있어도 컴파일은 잘 됩니다. 하지만 NullPointerException이 발생합니다.
표시 표시 : !!.
사용 방법 :
1println("str1 : $str1 str1.length: ${str1!!.length}")cs ☆ 엘비스(Elvis) 연산자
엘비스 연산자는 변수가 null 인지 아닌지 검사하여 null 이 아니라면 왼쪽 식을 그대롤 실행하고 null 이라면 오른쪽 식을 실행합니다.
null을 허용한 변수를 조금 더 안전하게 사용하려면 safe call 과 엘비스 연산자를 함께 사용하면 됩니다.
표시 방법 : ?:
사용 방법 :
1println("str1 : $str1 str1.length: ${str1?.length ?: -1}")cs ☆ 자료형 변환
자바는 작은 자료형에서 큰 자료형으로 자동 형변환이 가능하지만 코틀린은 자동 형변환이 가능하지 않습니다.
ex)
자바 : int a = 1;
double b = a;
이렇게 해도 에러가 나지 않고 double 자료형으로 잘 변환되어 저장됩니다.
코틀린 : val a: Int = 1
val b: Double = a
이렇게 하면 에러가 출력 됩니다. 자동 형 변환이 되지 않기 때문입니다.
이럴 때는 자료형 변환 메서드를 이용해야 합니다.
val b: Double = a.toDouble()
이렇게 자료형 변환 메서드를 이용하면 에러 없이 자료형을 잘 변환시킬 수 있습니다.
☆ 자료형 변환 메서드
toByte : Byte 형으로 변환 toFloat : Float 형으로 변환 toLong : Long 형으로 변환 toDouble : Double 형으로 변환 toShort : Short 형으로 변환 toChar : Char 형으로 변환 toInt : Int 형으로 변환 ☆ 기본형과 참조형 자료형의 비교
- 값만 비교할 때는 == 을 사용
- 참조 주소를 비교하려면 삼중 등호 === 를 사용
이중 등호는 참조에 상관 없이 값이 동일하면 true, 다르면 false
삼중 등호는 값과 상관 없이 참조가 동일하면 true를 반환. 값이 동일하더라도 참조 주소가 다르면 false를 반환
ex) val a: Int = 128
val b: Int? = 128
println(a == b) // true
println(a === b) // false
null을 허용한 변수는 값은 값을 저장해도 이중 등호와 삼중 등호를 사용한 결과값이 다릅니다.
<※ 참고> 저장되는 값이 128보다 작으면 그 값은 캐시에 저장되어 참조됩니다. 더 좋은 성능의 프로그램을 만들 수 있기 때문입니다.
☆ 스마트 캐스트
컴파일러가 자동으로 형 변환을 하는 것을 의미 합니다. 대표적으로 Number 형이 있습니다.
Number 형으로 정의된 변수에는 저장되는 값에 따라 정수형이나 실수형 등으로 자료형이 변환됩니다.
☆ 자료형 검사
is 키워드를 이용합니다. is 는 왼쪽 항의 변수가 오른쪽 항의 자료형과 같으면 true, 아니면 false를 반환합니다.
☆ Any형은 자료형이 특별히 정해지지 않은 경우에 사용합니다.
코틀린의 Any형은 모든 클래스의 부모 클래스입니다. 즉, 모든 클래스의 super class 라는 의미입니다.
Any형은 무엇이든 될 수 있기 때문에 언제든 필요한 자료형으로 자동 변환할 수 있습니다.
ex)
12345678910111213fun main() {check("hello")check(123)}fun check(x: Any){if (x is String) {println("x is String: $x")}if (x is Int) {println("x is Int: $x")}}cs ※ Do it! 코틀린 프로그래밍에서 공부한 내용들 입니다.
'kotlin > kotlin 공부' 카테고리의 다른 글
[kotlin] 연산자 (0) 2019.07.01 [kotlin] 코틀린 자료형 (0) 2019.06.22 [kotlin] 코틀린 기초, 변수 (0) 2019.06.21