일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- Java
- BEAN
- Spring
- javascript
- HTTP 메서드
- 싱글톤
- thymeleaf
- vuex
- Singleton
- cache
- 의존성 주입
- di
- Setter
- VUE
- 라이프 사이클
- 프로토타입
- dependency injection
- Stateless
- 캐시
- 로그인
- vue-cli
- Vue.js
- JPA
- Security
- DB
- HTTP
- Repository
- Kotlin
- Excel
- js
- Today
- Total
jhhan의 블로그
Kotlin(3) - Null 본문
코틀린에 대해 적는 세번째 포스트 입니다.
이번에는 Null에 대해 알아보겠습니다.
Kotlin에서는 변수를 사용할 때 반드시 값을 할당해줘야 합니다.
그래서 변수를 선언하고 값을 할당해주지 않으면 오류가 생깁니다.
var str1: String
println(str1)
만약 다음과 같이 코드를 작성하고 실행을 한다면 오류가 생깁니다.
물론 실행하기도 전에 빨간 줄이 나타나서 오류가 생긴 것을 알 수 있습니다.
물론 이렇게 해도 오류가 생깁니다.
이를 해결하기 위해서 null을 허용하는 변수들을 사용해야 합니다.
간단합니다. 자료형 타입 뒤에 물음표를 붙이면 됩니다.
var str1: String?
str1 = null
println(str1)
이렇게 사용하면 오류가 뜨지 않습니다.
결과도 이렇게 null로 잘 뜹니다.
또 다른 예시를 보겠습니다.
var num1: Int?
num1 = null
println("num1: $num1")
num1 = 3
println("num1: $num1")
이렇게 작성하시면
결과가 잘 뜨는 것을 확인하실 수 있습니다.
다음은 null일 경우 계산이 안되는 경우에 대해 보겠습니다.
var str1: String?
str1 = null
println("str1: $str1, length: ${str1.length}")
str1이 String?로 선언되었으므로 null값을 허용합니다.
하지만 str1의 값이 null이므로 length는 구할 수 없습니다.
실제로도 빨간 줄이 생긴 것을 확인할 수 있습니다.
이런 경우를 대비해서 코틀린에는 세이프 콜이 있습니다.
세이프 콜: 변수를 검사해서 안전하게 호출하도록 도와주는 연산자
사용법은 간단합니다. 변수뒤에 물음표를 붙이면 됩니다.
var str1: String?
str1 = null
println("str1: $str1, length: ${str1?.length}")
str1뒤에 물음표를 붙이고 원하는 메서드를 실행하면 됩니다.
결과가 정상적으로 나오는 것을 확인할 수 있습니다.
다음은 non-null 단정 기호에 대해 알아보겠습니다.
non-null 단정기호: null이 아니라고 단정해줌 -> 컴파일러가 null검사없이 계산을 진행
non-null의 경우 null인 경우에 문제가 생깁니다.
var str1: String?
str1 = null
println("str1: $str1, length: ${str1!!.length}")
아까의 코드를 아주 조금 바꿨습니다.
실제 코드 상에서도 아무 문제가 없는 것으로 보입니다.
하지만 실행을 한다면
다음과 같은 NPE(NullPointerException)이 발생한 것을 알 수 있습니다.
이제 다음과 같이 바꿔보겠습니다.
var str1: String?
str1 = "Hello"
println("str1: $str1, length: ${str1!!.length}")
이렇게 해야 오류가 발생하지 않는 것을 알 수 있습니다.
그렇기 때문에 null이 될 가능성이 없다고 생각할 때 사용하면 될 것 같습니다.
다음으로 엘비스 연산자에 대해 알아보겠습니다.
먼저 코드를 살펴보겠습니다.
var str1: String?
str1 = null
var len = if(str1 != null) str1.length else -1
println("str1: $str1, length: $len")
이 코드를 실행한다면
문제없이 실행이 되는 것을 확인할 수 있습니다.
여기서 조금 더 살펴보면
세번째 줄에 if문 안에 노란색 음영이 된 것을 볼 수 있습니다.
저기에 대고 alt+enter를 친다면
elvis expression으로 대체한다는 문구를 볼 수 있습니다.
elvis로 바꿔보겠습니다.
var str1: String?
str1 = null
var len = str1?.length ?: -1
println("str1: $str1, length: $len")
세번째 줄이 조금 더 간편해진 것을 볼 수 있습니다.
str1이라는 변수가 null이 아닐 경우 length 계산을 해줄테지만,
그렇지 않다면 -1을 반환할 것입니다.
코드의 결과입니다.
var str1: String?
str1 = "Kotlin"
var len = str1?.length ?: -1
println("str1: $str1, length: $len")
코드를 조금 바꾼 후 다시 실행해 보겠습니다.
코드의 결과입니다.
2개의 예시 모두 정상적으로 출력이 되는 것을 확인할 수 있습니다.
이렇게 null을 처리하는 방법에 대해 간략하게 알아봤습니다.
세이프 콜과 엘비스 표현식을 사용한다면 null값이 있더라도 문제없이 처리할 수 있을 것입니다.
이것으로 마치겠습니다.
'Kotlin' 카테고리의 다른 글
Kotlin(4) - 함수 관련 (0) | 2020.07.08 |
---|---|
Kotlin(2) - 변수 (0) | 2020.06.28 |
Kotlin 시작하기 (0) | 2020.06.27 |