
널 가능성 어노테이션이 없는 경우 자바의 타입은 코틀린의 플랫폼 타입이 됨
public class Person {
private final String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
}
fun yellAt(person: Person){
println(person.name.uppercase()+ "!!!")
}
fun main() {
yellAt(Person(null))
// java.lang.NullPointException: person.name must not be null
}
fun yellAt(person: Person){
println((person.name ?: "Anyone").uppercase()+ "!!!")
}
fun main() {
yellAt(Person(null))
// ANYONE!!!
}
📌코틀린의 플랫폼 타입 도입 이유
- 모든 자바 타입을 null이 될 수 있는 타입으로 다루면 불필요한 null 검사가 많아짐
- 리스트를 다룰 경우 각 원소에 접근할 때마다 null 검사 또는 안전한 캐스트를 수행해야 해 검사에 드는 비용이 너무 큼
- 모든 타입에 대한 null 검사를 작성하는건 비효율적임
interface StringProcessor {
void process(String value);
}
위 자바 인터페이스에 대해 코틀린 컴파일러는 두 구현을 다 받아들임
class StringPrinter: StringProcessor {
override fun process(value: String) {
println(value)
}
}
class NullableStringPrinter: StringProcessor {
override fun process(value: String?) {
if(value != null)
println(value)
}
}