안드로이드 공부/ NullSafety

yellow·2021년 5월 29일
0

안드로이드 공부

목록 보기
15/28

NullSafety

  • null에 대해서 안전함을 보장해주는 코틀린 특징이다.

0 vs Null

  • 0 : 휴지를 다 쓰고 휴지심만 남은 상태
  • null : 휴지심도 없는 상태, 존재하지 않는 상태, 모르는 상태

Null이 안전하지 않은 이유

  • 만약 null인 값으로 연산을 하려고 하거나, Null인 객체로 접근하려고 하는 경우에 NPE(Null Point Exception) Error가 발생할 수 있기 때문이다.

Kotlin의 NullSafety 관련 문법

📎 ?

  • 사용하려고 하는 변수나 객체가 null인지 아닌지 체크해주는 문법
  • 예시 1
// ? 앞에 있는 변수가 null이 아니라면 setOnClickListener를 실행하겠다.
button?.setOnClickListener{

}
  • 예시 2
    : null이 될 수 있는 자료형과 null이 될 수 없는 자료형 더하기
var num1:Int = 10
var num2:Int? = null
var num3:Int? = 5

//var num4: = num1 + num2
var num4 = num2?.plus(num1) // num4는 null

var num4 = num3?.plus(num1) // num4는 15

    -> ? 앞에 있는 변수가 null이라면, ? 뒤에 있는 코드는 무시


📎 !!

  • 사용하려고 하는 변수나 객체가 확실히 null이 아님을 보장해주는 문법
  • 예시 1
// button은 확실히 Null이 아니다.
button!!.setOnClickListener{

}
  • 예시 2
    : null이 될 수 있는 자료형과 상수를 더하려고 하는 경우에, 개발자가 null이 될 수 있는 자료형인 변수가 절대 null이 아님을 보장하고 싶을 때
var num1: Int? = 5

 // 개발자가 num1이 null이 아님을 보장한다.
var num2: Int = num1!! + 10

📎 엘비스 연산자 ?:

  • null 대신 넣어줄 default값을 지정해주는 연산자
  • 예시
// num1에 num2가 null이면 5를 대입하고, 아니면 num2에 있는 값 대입
var num1 = num2 ?: 5

📎 lateinit

  • 초깃값을 나중에 넣겠다고 선언하는 것
class Car(var number: Int){

}

lateinit var lateCar: Car

...

lateCar = Car(10)

lateinit을 사용하는 조건

  1. var에서만 사용할 수 있다.
  2. null을 통한 초기화는 할 수 없다.
  3. 초기화를 하기 전에는 접근할 수 없다.
  4. Int, Double 등과 같은 Primitive 타입에는 적용할 수 없다.
  5. 해당 변수에 대한 getter와 setter 정의는 불가능하다.
profile
할 수 있어! :)

0개의 댓글