본문 바로가기

프로그래밍 언어/코틀린_쌩초보를 위한 기초

쌩초보를 위한 기초_11_Type검사와 null

null (널)

 

함수의 진화B를 다루기 앞서 type(타입, ) 검사에 대해 알아본다.

변수를 선언할 때 아래 처럼 변수명, type()을 콜론으로 구분하여 정의한다는 것을 알았다.

아래 코드를 입력 해 보자.

 

 

그런데 빠진것이 있다.

위 변수 nullTest는 현재 값(value)이 없는 상태다.

이 처럼 변수에 값을 정하지 않거나 없는 경우가 있을 것이다.

이렇게 값이 없는 상태 null()이라고 한다.

 

코틀린은 변수를 사용할 때 반드시 값이 할당되어 있어야 한다.

, null을 허용하지 않는다.

 

이제 변수(nullTest)에 문자열 값을 넣어서 초기화 한다.

 

초기화(initialization)는 변수를 처음 선언할 때 값을 넣는 것이다.

초기화를 나중에 하는 lateinit 과 lazy 라는 것도 있다.

다음에 배울 기회가 있을 것이다.

 

어쨌든 위 코드의 현재 상태는 변수 nullTest에 문자열(String)  “not null” 이 저장되어 있다.

 

NullPointerException

 

프로그램이 작동하다가 값이 없는 상태에 부딪히면 에러가 난다.

이 에러를 NullPointerException (널 포인터 예외) 이라고 한다.

이런 에러는 프로그램이 종료되거나 시스템이 망가지는 원인이 되기도 한다.

이런 상황은 회사의 경우 수 십억 이상의 손해를 끼칠 수도 있는 문제이므로 프로그래머들에게는 가장 골칫거리 중 하나라고 한다. 그러므로 에러가 나지 않도록 항상 주의하고 조심해야 한다.

 

이번에는 변수 nullTestnull을 넣은 후 실행 해보자.

null은 값이 없는 상태를 나타내는 값으로 쓰인다.

에러 메시지가 뜬다.

에러 내용은 다음과 같다.

 

“Nullnull을 허용하지 않는 타입인 String의 값이 될 수 없다.”

 

# non-null: null을 허용하지 않는

 

null을 허용하려면 어떻게 할까?

null을 허용하려면 타입 String뒤에 ? 를 붙이면 된다.

 

null을 허용하지 않는다고 하는데 왜 굳이 허용하는 ?를 만들었나?

만일의 에러 사태에 대비하는 것이다.

null을 허용한다는 뜻은 변수의 값에 아무것도 없는 상태가 될 수도 있다는 것을 알려주는 것이다.

 

어쨌든 String null을 허용한 후 실행 해 보자.

일단 에러 메시지는 나타나지 않는다.

 

출력해서 확인 해보자.

'변수 값을 출력'하라는 아래 코드를 입력해서 실행 해 보자.

 

null값이 들어 있는데 문자열이 출력되었다.

이것은 null이 발생해도 에러를 피하기 위해 String으로 추정해서 “null”을 출력하는 것 같다.

 

 

이번에는 읽기 전용 변수(val)length를 이용해 본다.

length는 '문자의 길이(개수)'를 확인해서 그 결과를 Int값으로 반환한다.

호출하려면 앞에 마침표( . )를 붙이면 된다.

println(nullTest.length)

 

null을 큰따옴표로 감싸서 문자열로 만들고 실행해 보자.

 

문자열 null의 문자 개수를 Int값으로 보여준다.

 

이제 다시 null상태로 만들고 실행해 보자.

 

앞에서는 null을 허용한 후 에러를 회피하는 방법으로 해결했는데

이번에는 다른 변수를 불러온 상황이 되었다.

, 아무것도 없는 값(null)의 문자 길이를 반환 받아서 출력해야 하는 상황이다.

 

코드를 짤 때 지금과 같은 상황에서 에러가 많이 발생한다.

코드에서 length앞 점( . )에 에러가 표시된다.

실행 후 메시지는 다음과 같다.

“null 허용한 String에는 안전하게 하려면 ?를 붙이거나, 'null 아님'을 확인하려면 !!를 붙이는 2가지만 할 수 있다.

 

첫번째 방법에 따라 변수명 다음에 ?를 붙여서 실행 해보자.

 

null값의 문자 길이를 출력하려고 하니 에러가 나겠지만 안전하게 문자열을 출력하는 것 같다.

 

이번에는 !!붙여서 실행 해보자.

드디어 에러다운 에러가 뜬다.

에러 첫줄에  KotlinNullPointerException(코틀린 널 포인터 에러)가 선명하다.

 

위 코드는 null인데 null이 아니라고( !! )우기니까 널포인터에러가 난 것이다.

 

어쨌든 코틀린은 원칙적으로 null(값이 없는 상태)을 허용하지 않고 NullPointerException (널포인터예외) 에러를 방지하기 위한 다양한 회피 방법을 준비해 둔 것 같다.

 

널포인터예외 에러 방지는 다음에 알아볼 함수형 프로그래밍에서도 필수적인 개념이므로 이번글에서 간단하게 살펴보았다.

끝.