본문 바로가기

# 02/코틀린

[Kotlin] Null 예외처리

반응형

if/else 대신 사용하기 - java


-> java에서는 3항 식을 사용할 수 있다.


String temp = null;

int size = temp != null ? temp.length() : 0;



if/else 대신 사용하기 - kotlin


var temp : String? = null

// val size = if (temp != null) temp.length else 0


->

val size = temp?.length


var temp : String? = ""

val size = temp?.length


- 결과 : length 또는 null




Elvis Operator을 사용하여 null인 경우 값을 지정하자


- Elvis Operator : ?:



var temp : String? = null

// val size = if (temp != null) temp.length else 0

// val size = temp?.length


->

val size = temp?.length ?: 0


- 결과 : 0 또는 length




fun getSize (a : String?):Int = a?.length ?: 0


fun test() {

val temp : String? = null

println("size ${getSize(temp)}")

}

// 0 출력




Elvis Operator 유용하게 사용하기 - java


String temp = null;

textView.setText(temp != null ? temp : "")                 // temp가 null이 아니면 그대로 출력하고 null 일 시에는 "" 출력 




Elvis Operator 유용하게 사용하기 - kotlin


val temp : String? = null

textView.text = if (temp != null) temp else ""

textView.text = temp ?: ""                                     // 위와 같은 식 더 간단하게 나타낼 수 있다.




NPE(Null Pointer Exception)


-> java

String temp = null;

int size = temp.length();

// NPE 발생



-> kotlin

val temp : String? = null

val size = temp?.length


!! Operator을 사용하자

- null 인 경우 자동으로 NullPointerException을 발생시킨다.


val temp : String? = null

val size = temp!!.length



-> try/catch가 필요한 경우


val size = try {

temp!!.length

} catch (e : NullPointerException) {

0

}



-> Elvis Operator을 이용하여 Exception 발생시키기


var temp : String? = null

val size = temp!!.length

-> or

val size = temp?.length ?: throw NullPointerException("temp is null")





java와 kotlin을 같이 쓸 때 주의점


-> kotlin

class Sample {

fun sumString(a : String, b : String) = "$a $b"

}



-> kotlin

class ExampleUnitTest {


lateinit var sample : Sample

private var a : String? = ""


@Before

fun setUp() {

sample = Sample()

a = null                     

}


@Test

@Throws (Exception::class)

fun test() {

sample.sumString(a, "B")                                // a가 null 이면 오류 발생 Sample의 sumString 함수의 파라미터가 null 허용하지 않음!!

}


}


-> java

public class ExampleUnitTest {


private Sample sample;

private String a;


@Before

public void setUp() {

sample = new Sample();

a = null;                     

}


@Test

fun test() {

sample.sumString(a, "bbb")                        

// 파라미터에 null을 그대로 대입하면 컴파일시 에러가 뜨지만 a가 null 이여도 컴파일시 에러뜨지 않음!! 실행하면 에러뜸!!

}

}



-> 1번째 방법

-> java

public class ExampleUnitTest {


private Sample sample;

private String a;


@Before

public void setUp() {

sample = new Sample();

a = null;                     

}


@Test

fun test() {

if( a != null) {

sample.sumString(a, "bbb")                        

// a가 null인지 if문으로 확인하는 방법. 하지만 개발자가 여러명일때 일일이 확인하기는 쉽지 않다.

}

}



-> 2번째 방법

-> kotlin

class Sample {

fun sumString(a : String?, b : String?) = "length ${a?.length ?: 0} $a $b"

}

// 코틀린 코드에서 null을 허용한 다음 elvis operator를 사용해서 지정해주는 방법


반응형

'# 02 > 코틀린' 카테고리의 다른 글

[Kotlin] Class Inheritance  (0) 2019.07.11
[Kotlin] Null 예외처리 - etc  (0) 2019.07.11
[Kotlin] Null 처리 방법  (0) 2019.07.11
[Kotlin] return and jumps and This-expressions  (0) 2019.07.11
[Kotlin] Lambda  (0) 2019.07.11