본문 바로가기
Language/Kotiln

[Kotlin] 코틀린 기본문법2 (NULL처리 : lateinit/lazy/!!/?/?.)

by 카프리썬 2022. 1. 30.
728x90

 

지금까지 코틀린 기본세팅을 진행했다.

2022.01.29 - [Kotlin] 코틀린 기본개념 - 코틀린이란? 도대체 왜 쓰는가? 특징!

2022.01.28 - [Kotlin] 코틀린 환경설정 - Intellj에서 코틀린 프로젝트 생성하기

2022.01.29 - [Kotiln] Intellj에서 코틀린 코딩컨벤션 Kotlin Style Guide 적용하기

2022.01.30 - [Kotiln] 코틀린 실행하기 - Scratch File (스크래치 파일) 만들기

 

이제는 코틀린에 익숙해지기 위해서 간단한 코틀린 기본문법을 돌려볼 것이다. 이전에 한 기본문법 심화버전으로!

2022.01.29 - [Kotiln] 코틀린 기본문법1 (변수선언/함수선언/자료형/반복문/조건문)

 

반응형

NULL 처리

기본적으로 코틀린은 널값을 가질수 없도록 설정되어 있다. 그래서 널값을 이용하려면 추가적인 작업이 필요하다.  

 

? 키워드를 사용해서 이 변수는 널이 가능한 변수라고 선언해줘야한다. 

var x: Int = 10
x = null //널 불가 변수에 널 넣어서 오류

var y: Int? = 10
x = null //널 가능 변수에 널 넣어서 정상

?. 키워드를 사용해서 널이 아닐때만 함수가 실행되고, 널이 되면 널을 반환하도록 한다. 

즉 자바에서  if(str != null) return str.toUpperCase() else return null 을 한줄로 표현할 수 있는 것이다. 

val str = "abc"

println(str?.toUpperCase()) //str이 null이 아니면 str.toUpperCase(), null이면 null반환

!! 키워드를 사용해서 강제로 null 값이 들어가지 않을 것이라고 null이 아님을 보증한다. 

항상 이렇게 선언된 변수는 not null로 인식되는데, 이때 Null이 되면 널포인트 에러가 발생한다. 

val s: String? = null
val x: String = s!!

lateinit 키워드를 사용해서 var 변수를 선언만 해두고 나중에 초기화 값을 지정할 수 있다. (늦은 초기화)

첫 상태를 정의하기 어려울때 null로 선언하지 않고, 이렇게 선언하면 나중에 초기화 이후에도 계속해서 값이 바뀔수 있다. 

lateinit var text: String

// 대충 중간에 뭔가 했음
val result1 = 30

text = "Result : $result1"
println(text)

// 대충 뭔가 또 했음
val result2 = 50

text = "Result : ${result1 + result2}"
println(text)

lazy 키워드를 사용해서 val 변수를 선언만 해두고 나중에 초기화 값을 지정할 수 있다. (늦은 초기화) 

첫 상태를 정의하기 어려울때 null로 선언하지 않고, 호출할때 어떻게 초기화해줄지 정의할 수 있다. 

하지만 val변수로 선언했기 때문에 한번의 늦은 초기화 이후에는 값이 바뀔수 없다. 

lateinit var text: String //var변수 늦은초기화 
val result: Int by lazy { //val변수 늦은초기화 
    text.length
}

text = "123"
println(result) //앞에서 초기화 정의내용 따라서 text.length결과(text길이:3) 출력

 

 

 

 

참고

https://velog.io/@haero_kim/Kotlin-lateinit-vs-lazy-%EC%A0%95%ED%99%95%ED%9E%88-%EC%95%84%EC%84%B8%EC%9A%94 

 

[Kotlin] 🤚🏻 lateinit vs lazy, 정확히 아세요?

조금이라도 헷갈린다면 들어오세요!

velog.io

https://velog.io/@gosgjung/3%EB%B6%84-kotlin-5-%EC%BD%94%ED%8B%80%EB%A6%B0%EC%9D%98-%EC%97%AC%EB%9F%AC%EA%B0%80%EC%A7%80-null-%EC%B2%98%EB%A6%AC%EB%B0%A9%EC%8B%9D%EB%93%A4

 

3분 kotlin (5) - 코틀린의 여러가지 null 처리방식들

코틀린에서는 기본적으로 객체를 불변으로 취급하고 null 값을 허용하지 않는다. null 값을 허용하려면 별도의 연산자를 사용해 초기화한다. null 값이 허용된 자료형을 사용할 때에서 별도의 연산

velog.io

 

반응형

$(document).ready(function() { var $toc = $("#toc"); $toc.toc({content: ".tt_article_useless_p_margin", headings: "h2,h3,h4"}); });