플랫폼 유형
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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.