프로그래밍Kotlin 개발자

Kotlin에서 Nullable 타입 작업의 특징을 설명하십시오. 언어에서 null 값을 안전하게 처리할 수 있게 해주는 도구는 무엇입니까? 코드 예제를 제시하고 모범 사례를 설명하십시오.

Hintsage AI 어시스턴트로 면접 통과

답변.

Kotlin은 타입 시스템을 통해 null에 대한 안전한 작업을 구현합니다: 모든 타입은 기본적으로 null이 될 수 없으며, 예를 들어 val a: String = null은 컴파일 오류를 발생시킵니다. null 할당 가능성을 나타내기 위해 질문 기호 ?를 사용합니다. 예:

val name: String? = null

Nullable 타입 작업을 위한 제공 사항은 다음과 같습니다:

  • Safe-call operator: ?.는 객체가 null인 경우 null을 반환하고 그렇지 않으면 메서드/필드를 호출합니다: name?.length.
  • Elvis operator: ?:는 왼쪽이 null일 때 기본값을 설정합니다: val length = name?.length ?: 0
  • if/when을 통한 검사: 예:
if (name != null) { println(name.length) }
  • assert 연산자 ( !! ): 객체가 null일 경우 NullPointerException을 발생시키면서 값을 강제로 가져옵니다 (극히 신중히 사용됨):
val length = name!!.length

모범 사례: Nullable 타입을 최소화하고 Safe-call 및 Elvis 연산자를 사용하며 !!를 피하고, null이 허용되는 상황을 명확히 모델링합니다.

함정 질문.

val a: String 타입에 null 값을 할당할 수 있습니까? 이를 피하려면 어떻게 해야 합니까?

답변: 아니요, 기본적으로 Kotlin에서는 타입이 null과 같을 수 없습니다. null 할당을 허용하려면 명시적으로 val a: String? = null을 지정해야 합니다. ?가 없는 타입은 항상 non-null입니다.

주제에 대한 세세한 지식 부족으로 발생한 실제 오류 사례.


이야기

은행 애플리케이션 프로젝트에서 User 타입의 변수는 고객 검색 결과를 저장했습니다. 개발자는 var user: User를 정의했으나 때때로 고객이 발견되지 않아 서비스가 null을 반환했습니다. 이는 NPE를 일으키고 대규모 충돌을 발생시켰습니다.


이야기

지원용 챗봇에서 사용자가 보낸 메시지에 접근하기 위해 !!를 사용했으나 (message!!.text) 메시지가 항상 온다고 생각했습니다. 빈 메시지가 처음에 발생하여 봇이 충돌했습니다. Safe-call이 문제를 해결했을 것입니다.


이야기

모바일 애플리케이션에서 데이터베이스의 데이터가 로드되지 않을 수 있으며 null로 도착했습니다. 개발자는 안전한 접근 대신 직접 접근을 사용하여 불완전한 데이터로 인해 모든 경우에 크래시가 발생했습니다.