본문 바로가기
Language/Kotlin

Kotlin에서의 기본 인자 값과 널 허용성

by 시니성 2023. 10. 12.

Kotlin은 다양한 기능을 제공하여 개발자의 생산성을 향상시키며, 그 중에서도 기본 인자 값과 널 허용성은 특히 주목받는 특징 중 하나입니다. 하지만 이 두 특징을 함께 사용할 때 주의해야 할 점이 있습니다.

기본 인자 값

Kotlin 함수나 클래스의 생성자에는 기본 인자 값을 제공할 수 있습니다. 이를 통해 호출자가 특정 인자를 생략하면 기본 값이 사용됩니다.

예를 들어, 아래의 Greeting 클래스에서 message 매개변수에 기본 값 "Hello"가 지정되어 있습니다.

data class Greeting(val message: String = "Hello")

println(Greeting()) // 출력: Greeting(message=Hello)

널 허용성

Kotlin은 널 허용성을 명시적으로 지정할 수 있게 해서 NullPointerException을 방지하는 방법을 제공합니다. ?를 타입 뒤에 붙이면 해당 타입의 변수는 null 값을 가질 수 있게 됩니다.

조심해야 할 부분

기본 인자 값과 널 허용성을 함께 사용할 때 주의해야 할 점이 있습니다.

data class StoreFunSetM(val cupUseYn: String? = "Y")

이 경우, StoreFunSetM 클래스를 생성할 때 cupUseYn 매개변수를 생략하거나 "Y"로 명시적으로 전달하면 기본값 "Y"가 할당됩니다. 그러나 null을 전달하면 명시적으로 null 값이 할당됩니다.

StoreFunSetM("Y")  // => cupUseYn = "Y"
StoreFunSetM()     // => cupUseYn = "Y"
StoreFunSetM(null) // => cupUseYn = null

이처럼, 기본 인자 값이 있는 널 허용 매개변수에 null을 전달하면 기본값 대신 null이 할당됩니다.

추가적인 가상 시나리오

상품 정보를 나타내는 Product 클래스가 있다고 가정해봅시다.

data class Product(val name: String, val price: Double? = 0.0)

이 경우, price는 기본값으로 0.0을 가집니다.

Product("Book")         // => Product(name=Book, price=0.0)
Product("Pen", 1.5)     // => Product(name=Pen, price=1.5)
Product("Note", null)   // => Product(name=Note, price=null)

위의 예에서 볼 수 있듯이, 기본값이 있는 널 허용성 변수에 null을 전달하면 기본값 대신 null이 할당됩니다.

결론

Kotlin의 기본 인자 값과 널 허용성은 강력한 기능입니다. 그러나 이 두 특징을 함께 사용할 때는 주의가 필요합니다. 기본값을 제공하는 널 허용 변수에 null을 전달하면 기본값이 아닌 null이 할당될 수 있기 때문입니다.

728x90

'Language > Kotlin' 카테고리의 다른 글

Event Sourcing을 통한 함수형 프로그래밍의 적용  (0) 2023.10.13
코틀린에서의 `reduce`  (0) 2023.10.13
Kotlin Companion Object에 대해  (0) 2023.09.20
Kotlin의 'All' 함수에 대해  (0) 2023.09.15
Kotlin의 `any` 함수란?  (0) 2023.09.15