Kotlin

Kotlin- 문법1

취업하고싶다! 2023. 6. 2. 17:49

 

코틀린의 기능 중 가장 혁신적이라고 여겨지는 것 중 하나가 옵셔널(Optional) 개념이다.

코틀린에서 옵셔널이라는 말을 사용하기보단, 자바에서 사용하던 Nullable(널 가능)과 NotNull(널 불가능)이라는 말을 사용한다.

 

자바에서 Exception의 상담 부분을 차지하던 NullPointerException을 해결하기위해 @Nullable과 @NotNull이라는 Annotation을 만들었었지만, 널리 사용되진 않았었다.

 

코틀린에서는 변수에 대한 기본 타입을 NotNull로 정하고 널 값을 가질 수 있는 Nullable 타입엔 명시적으로 표시하도록해 Null에 대한 처리에 강제성을 더했다.(스위프트와 동일한 부호인 '?'를 사용함)

 

예를 들어보자. 자바에 다음과 같은 메서드가 있다.

int strLen(String s) {
	return s.length();
}

NullPointerException을 유발하는 대표적인 코드다. 매개 변수로 전달되는 s가 null일 경우 프로그램은 s.length에서 NullPointerException이 발생한다. 

 

코틀린에서는 위 코드를 그대로 사용하고, strLen() 함수에 null이 될 수 있는 타입의 변수를 매개 변수로 사용한다면 컴파일 단계에서 에러가 발생한다.

 

null이 될 수 있는 타입을 매개 변수로 받을 수  있도록 하려면 s 변수를 Nullable 타입으로 선언해야 한다.

fun strLen(s: String?) = s.length()

String에 '?' 연산자를 붙여 Nullable 타입임을 명시했다.

근데 이렇게해도 에러가 발생한다.

왜? Nullable 타입의 변수는 멤버 메서드를 바로 호출할 수 없어서 그렇다고 한다.

반드시 예외처리를 해줘야 한다.

fun strLen(s: String?): Int = if (s != null) s.length else 0

이렇게 s != null이 아닐 때만 s.length가 나오게하고 s = null일 때는 0이라고 예외처리를 해주면 NullPointerException이 발생하지 않는다.

 

Nullable 타입은 코틀린 언어의 장점 중 하나라고 한다.

코틀린 개발을 시작한 지 6개월이 지났지만, 문법 공부를 초기에 조금 하고 제대로 하지 않아서 다시 처음부터 정리하려 한다.

'Kotlin' 카테고리의 다른 글

Kotlin 면접준비(2)  (2) 2023.06.04
Kotlin 면접준비(1)  (0) 2023.06.04
클린 아키텍처(Clean Architecture)  (0) 2023.06.02
코틀린 컨벤션  (0) 2023.06.01
UMC project 1주차(23/01/02~23/01/10)  (0) 2023.01.11