반응형
data class Person(val name: String, val age: Int? = null)
fun main(args: Array<String>) {
    val persons = listOf(Person("영희"), Person("철수", age=29))
    
    val oldest = persons.maxBy { it.age ?: 0}
    println("나이가 가장 많은 사람: $oldest")
}

name와 age라는 프로퍼티가 들어간 데이터 클래스를 정의 했다.

age의 디폴트 값은 null로 지정했다.

사람이라는 리스트를 만들었는데 영희의 나이는 지정하지 않았기 때문에 null 값이 들어감.

리스트에서 가장 나이가 많은 사람을 찾기 위해 우리느 maxBy 함수를 사용한다.

maxBy 함수에는 it.age ?: 0 이라는 람다식을 쓰는데, age가 0일 경우에는 0을 반환하고 그렇지 않은 경우에는 age의 값을 반환해준다는 식이다.

결론적으로, 영희의 null은 0으로 반환되기 때문에 나이가 가장 많은 사람은 철수가 된다. 

 

코틀린은 Null이 될 수 있는 타입을 지원한다는 중요한 특성이 있다.

널이 될 수 있는 타입을 지원함에 따라 컴파일 시점에서 널 포인터 예외가 발생할 수 있는지 여부를 검사할 수 있어서 좀 더 프로그램의 신뢰성을 높일 수 있다.

 

코틀린 타입 시스템은 null 값을 정확히 추적하며 널 포인터로 인해 생기는 문제를 줄여준다.

자바에서 Null PointerException을 일으키는 유형의 코드는 대부분 코틀린에서는 컴파일도 되지 않는다. 

 

코틀린은 정말 좋은 언어이다. 

프로그래머가 작성하는 코드에서 의미가 없는 부분을 줄이고, 프로그램에 꼭 넣어야 하는 부수적인 요소를 줄이기 위해 많은 노력을 기울였다.

 

Getter, Setter, 생성자 파라미터를 필드에 대입하기 위한 로직 등 자바에 존재하는 여러 가지 번거러운 준비 코드를 코틀린은 묵시적으로 제공하기 때문에 코틀린 소스코드는 그런 준비 코드로 인해 지저분해지는 일이 없다.

+ Recent posts