0Pricing
Kotlin Academy · 강의

플랫폼 유형

Java에서 비롯된 널 허용성

플랫폼 유형은(는) CoddyKit의 무료 Kotlin Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Kotlin Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Kotlin Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

Kotlin과 Java의 만남

Kotlin은 JVM에서 실행되며 Java 코드를 끊임없이 호출합니다. 하지만 Java에는 널 허용 타입과 널이 아닌 타입이라는 개념이 없습니다.

그렇다면 Kotlin은 Java에서 전달되는 값을 어떻게 처리할까요? 플랫폼 타입을 통해 처리합니다.

플랫폼 타입이란

플랫폼 타입은 Kotlin이 Java에서 가져오며 널 가능성이 확실하지 않은 타입입니다.

Kotlin은 오류 메시지에서 이를 String!으로 표시합니다. 느낌표는 널일 수도 있고 널이 아닐 수도 있으므로 Kotlin이 어느 한쪽을 강제하지 않는다는 뜻입니다.

느슨한 검사

플랫폼 타입에 대해서는 Kotlin의 널 검사가 느슨하게 적용됩니다. 컴파일러 오류 없이 값을 널이 아닌 값으로 취급할 수 있습니다.

그 대가로 실제 값이 널이면 실행 중 NullPointerException이 발생합니다.

타입은 직접 선택합니다

플랫폼 타입 값을 저장할 때는 타입을 직접 결정합니다:

  • 널이 아닌 String으로 지정 → 편리하지만 위험합니다
  • 널 허용 String?으로 지정 → 안전하고 명확합니다

이 Kotlin 예제는 이러한 선택을 흉내 냅니다.

fun fromJava(): String? = "value from Java"

fun main() {
    val safe: String? = fromJava()
    println(safe?.length)
}

위험한 선택

널이 아니라고 가정했는데 원본이 널을 반환하면, 대입할 때나 처음 사용할 때 충돌이 발생합니다.

이것이 플랫폼 타입에 숨겨진 위험입니다.

fun fromJava(): String? = null

fun main() {
    try {
        val risky: String = fromJava()!!
        println(risky.length)
    } catch (e: NullPointerException) {
        println("Null came from the Java side")
    }
}

어노테이션의 도움

Java 라이브러리는 @Nullable 및 @NotNull과 같은 어노테이션을 사용할 수 있습니다.

어노테이션이 있으면 Kotlin은 이를 인식하여 플랫폼 타입 대신 올바른 String? 또는 String을 제공합니다.

권장 방법: 널 허용으로 가정하기

어노테이션이 없는 Java 코드를 호출할 때는 결과를 널 허용으로 취급하는 것이 안전한 습관입니다.

변수를 ?와 함께 선언하고, Kotlin의 다른 널 허용 값과 마찬가지로 안전 호출을 사용하세요.

fun fromJava(): String? = "data"

fun main() {
    val value: String? = fromJava()
    val length = value?.length ?: 0
    println(length)
}

방어적인 경계 처리

Java와의 경계를 신뢰할 수 없는 영역으로 취급하세요. 값이 Kotlin 코드로 들어오는 바로 그 지점에서 값을 검증하거나 기본값을 지정하세요.

그 이후에는 코드의 나머지 부분에서 깔끔한 Kotlin 타입을 사용할 수 있습니다.

fun fromJava(): String? = null

fun main() {
    val name = fromJava() ?: "default"
    // from here on, name is a clean non-null String
    println(name.uppercase())
}

Kotlin이 이를 허용하는 이유

Kotlin이 모든 Java 값을 널 허용으로 강제할 수도 있지만, 그러면 Java 연동 코드가 지나치게 장황해집니다.

플랫폼 타입은 편리함과 엄격하게 처리할 수 있는 선택지를 함께 제공하는 현실적인 절충안입니다.

플랫폼 타입 알아보기

String!을 직접 작성하지는 않습니다. Java에서 온 값 위에 마우스를 올렸을 때 IDE 힌트와 오류 메시지에만 나타납니다.

!을 보면 널 가능성을 신중하게 결정해야 한다는 신호로 받아들이세요.

정리

플랫폼 타입은 Java와 Kotlin을 연결합니다:

  • 널 가능성이 확실하지 않으며 Type!으로 표시됩니다
  • Kotlin에서는 널 허용 또는 널이 아닌 타입을 선택할 수 있습니다
  • 확실하지 않을 때는 안전을 위해 널 허용으로 가정하세요
  • 어노테이션을 사용하면 추측할 필요가 없습니다
fun fromJava(): String? = "safe value"

fun main() {
    val value: String? = fromJava()
    println(value?.uppercase() ?: "missing")
}

빠른 확인

플랫폼 타입에 대한 이해도를 확인해 보세요.

복습

Java와의 경계를 넘어 널 가능성이 전달되는 방식을 배웠습니다:

  • 플랫폼 타입은 널 가능성이 확실하지 않습니다
  • Kotlin은 검사를 느슨하게 적용하지만 잘못된 가정은 실행 중 NPE를 발생시킵니다
  • 경계에서 널 허용으로 가정하고 기본값을 지정하세요
  • Java 어노테이션을 사용하면 올바른 타입을 복원할 수 있습니다

이것으로 널 안전성 심화 학습을 마칩니다.

자주 묻는 질문

“플랫폼 유형” 강의는 무료인가요?

네 — “플랫폼 유형” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Kotlin Academy 강의 전체를 잠금 해제할 수 있습니다. Kotlin Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“플랫폼 유형”에서 뭘 배우나요?

Java에서 비롯된 널 허용성 브라우저에서 직접 실행하는 실습 코드로 Kotlin Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Kotlin Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Kotlin Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“플랫폼 유형” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Kotlin Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Kotlin Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 널 허용 및 널 불허 유형
  2. 안전 호출과 엘비스
  3. !! 연산자
  4. 플랫폼 유형
← Kotlin Academy(으)로 돌아가기