본 글은 [깡샘의 코틀린 프로그래밍 - 루비페이퍼] 의 내용을 발췌한 것입니다.
좀더 자세한 내용은 책을 통해 확인해 주세요.
15장. Null Safety와 예외처리
15.1.1. Null Safety 란?
Null이란 프로그램에서 아무 값도 대입하지 않은 상태를 말합니다. 프로그램의 데이터는 메모리에 저장합니다. 그런데 데이터가 메모리의 어느 위치에 저장됐는지 알아야 그 메모리에 접근해 데이터를 가져오거나 수정할 수 있습니다. 이때 데이터가 저장된 메모리의 위치를 주소 값이라고 표현하는데, 그 주소 값이 없는 상태가 Null입니다.
특히 객체는(코틀린에서는 모든 것이 객체입니다) 흔히 참조 변수라고 표현해서 실제 객체에 데이터가 대입된 게 아니라 데이터를 가지는 메모리의 주소 값이 저장된 변수입니다. 그런데 객체에 대입된 주소 값이 없는 상태, 즉 Null은 객체가 생성되지 않아서 메모리 할당이 이루어지지 않은 상태를 이야기합니다.
문제는 Null이 메모리 할당이 이루어지지 않은 상태를 표현하기 위한 용도이지만, 개발 때는 참 귀찮은 존재입니다. Null이라는 개념을 처음 만들었던 사람(Tony Hoare) 조차도 Null을 만든 게 크나큰 실수 (The Billion Dollar Mistake)라고 표현할 정도입니다. 프로그램을 개발할 때 Null 상태는 표현할 수 있지만 Null 상태인 변수에 접근하면 NullPointException (흔히 NPE라고 부릅니다)이라는 에러가 발생합니다. Null 상태의 변수는 할당된 메모리가 없기 때문에 접근을 시도하면 에러가 발생할 수밖에 없습니다. 이 때문에 개발자들이 NPE를 피하고자 참 많은 코드를 작성해야 했습니다. 변수가 Null인지 아닌지 확인하고 Null이면 어떻게 처리하고, Null이 아니면 어떻게 처리한다 등의 코드가 계속 반복될 수밖에 없습니다. 결국, 이렇게 되다 보니 Null이라는 개념을 만든 것 자체가 실수라는 말이 나오는 것입니다.
그렇다면 코틀린의 Null 안전성이란 무엇일까요? 이건 코틀린에서 Null이라는 개념이 없다는 것이 아니라, 이 Null에 다양한 처리를 도와줌으로써 Null에 의한 NPE가 발생하지 않는 프로그램을 작성할 수있게 해준다는 개념입니다.
'Kotlin' 카테고리의 다른 글
[깡샘의 코틀린 프로그래밍] 정리 17 - Variance (0) | 2018.03.02 |
---|---|
[깡샘의 코틀린 프로그래밍] 정리 16 - Extension (0) | 2018.03.02 |
[깡샘의 코틀린 프로그래밍] 정리 14 - forEach() (0) | 2018.03.02 |
[깡샘의 코틀린 프로그래밍] 정리 13 - 고차 함수 (0) | 2018.03.02 |
[깡샘의 코틀린 프로그래밍] 정리 12 - 람다 표현식 (0) | 2018.03.02 |