💡 < 코틀린을 다루는 기술 >의 내용을 참고했습니다.
안전한 프로그래밍은,
val name: String = "Frank"
val
을 사용한다 : 뒤에 오는 name이 불변임(참조가 불변임)을 의미한다(Java에서는 final
)val name = "Frank"
var
키워드를 사용한다var name: String = "Frank"
...
name = "Phillip"
var
사용을 최대한 피해라초기화에 비용이 많이 들어서 참조를 실제로 사용하기 전까지 초기화하고 싶지 않을 때 사용한다
var name: String? = null
...
name = getName()
nullable-type
과 non-nullable-type
이 있는데, var을 쓴다면 String? 같은 nullable-type을 써서 초기화해야 한다lateinit var name: String
...
name = getName()
lateinit
키워드를 사용한다by lazy
와 비교하면 DI(Dependency Injection) 프레임워크 등으로 외부에서 필드 초기화를 진행하는 경우를 제외하고는 장점이 전혀 없다. 지양하자val name: String by lazy { getName() }
// 위와 같은 표현으로 람다를 사용한다면
val name: String by lazy(::getName)