티스토리 뷰
본 포스팅의 내용은 [깡샘의 코틀린 프로그래밍]을 공부하고 작성자가 생각을 정리하기 위해서 작성한 글이므로 더욱 자세한 내용을 알고 싶으신 분은 [깡샘의 코틀린 프로그래밍]을 강력 추천합니다!!
1. Null 안정성
Null 이란
null은 아무 값도 대입하지 않은 상태를 말하며 특히 객체는 흔히 참조 변수라고 표현해서 실제 객체에 데이터가 대입된 게 아니라 데이터를 가지는 메모리의 주소 값이 저장된 변수이다.
Null Pointer Exception이란
Null은 메모리 할당이 이루어지지 않은 상태를 표현하기 위한 용도이지만 개발 때는 참 귀찮은 존재이다. Null을 처음 고안한 사람조차도 Null을 만든게 큰 실수라고 말할 정도..
Null 상태의 변수는 할당된 메모리가 없기 때문에 변수에 접근을 시도하면 당연히 에러가 나게 되고 이를 Null Pointer Exception(NPE)라고한다. 그래서 개발자들은 NPE를 피하고자 Null인지 아닌지 확인하고 Null일 때의 처리, Null이 아닐 때의 처리를 구구절절 적어야 했다.
Null 안정성이란
예전에 코틀린의 특징으로 Null 안정성을 꼽았는데 Null 안정성이란 Null이라는 개념이 없다는 것이 아니라 Null에 대한 다양한 처리를 도와줌으로써 Null에 의한 의도치 않은 동작을 방지하는 프로그램을 작성할 수 있게 해준다는 개념이다.
2. Null 허용과 Null 불허
- 타입을 선언할 때 Null 허용인지 불허인지 정해야 한다.
var data1: String = "weekyear"
var data2: String? = null
- Null 불허로 선언된 변수에 Null 허용으로 선언된 변수를 대입할 수 없다.
3. Null 확인 연산자 (?.)
- 코틀린에서는 Null 허용 프로퍼티를 이용하면 컴파일 때부터 에러가 발생한다.
- NPE에 대해서 안전하게 작성하라는 의미
var strLength: Int? = data1?.length
- ?. 연산자는 Null을 안전하게 사용하기 위해 제공하는 연산자로 프로퍼티 값이 Null이 아니면 뒤의 length가 실행되고 Null이면 null을 반환한다.
- 때로는 프로퍼티 값이 Null이 아닐 때 특정 구문을 수행해야 할 때가 있다. 이때 let { } 구문을 이용하면 쉽게 작성할 수 있다.
val array = listOf("hello", null, "weekyear")
array.forEach {
it?.let{
println(it)
}
}
4. 엘비스 연산자 (?:)
- 때로는 Null일 때 대입해야 하는 값이 있거나 실행해야 하는 구문이 있다. 이럴 때 ?: 연산자를 이용한다.
val length = data1?.length ?: -1 // data1이 null일 때 -1이 length에 담긴다.
5. 예외 발생 연산자 (!!)
- !! 연산자는 Null이면 NPE를 발생시키다.
data1!!.length // data1이 null일 경우 NPE가 발생한다.
6. 안전한 캐스팅 (as?)
- 명시적 캐스팅은 as 연산자를 이용하는데 as 연산자를 이용할 때 캐스팅이 불가능한 경우는 ClassCastException이 발생한다.
- ClassCastException이 발생해야 하는 상황에 에러 없이 null을 반환하게 할 때 as? 연산자를 활용한다.
val myName = "weekyear"
val number: Int? = myName as? Int // myName은 숫자가 아니므로 캐스팅 에러가 발생하는데 에러가 발생하지 않고 null이 nubmer에 담긴다.
참고 자료
[깡샘의 코틀린 프로그래밍] 강성윤 지음 <루비페이퍼>
반응형
'Programming > 코틀린(Kotlin)' 카테고리의 다른 글
[Kotlin] Scope function 제대로 쓰자! (0) | 2022.10.30 |
---|---|
코루틴을 활용하기 전에 익혀야할 개념 (0) | 2021.06.17 |
[코틀린] 14. 컬렉션 타입과 람다 - 4. 요소 함수, 5. 정렬 함수 (0) | 2021.05.02 |
[코틀린] 14. 컬렉션 타입과 람다 - 2. 필터링 함수, 3. 매핑 함수 (0) | 2021.05.02 |
[코틀린] 14. 컬렉션 타입과 람다 - 1. 집합 연산 함수 (0) | 2021.05.02 |
댓글