Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- nGrinder
- 동기화
- cloud native
- 마이크로서비스
- Kotlin
- java
- decorator 패턴
- Stress test
- Semaphore
- 코틀린
- devops
- 쿠버네티스
- Algorithm
- ingress
- CRD
- 익명클래스
- ansible
- 자바
- spring microservice
- 헬름
- cloud native java
- Spring
- kubernetes
- Microservice
- 머신러닝
- MySQL
- Adapter 패턴
- MSA
- 클라우드 네이티브 자바
- 클라우드 네이티브
Archives
- Today
- Total
카샤의 만개시기
코틀린 lateinit과 by lazy 본문
코틀린은 null 처리가 매우 엄격한데, null이 사용되지 않는 프로퍼티에 초기화 시점을 미룸으로써 null 허용으로 선언할 필요가 없습니다.
lateinit
class User {
lateinit var lateData: String
}
fun main(args: Array<String>) {
val user = User()
user.lateData = "hello world"
println(user.lateData)
}
실행결과
hello world
사용 규칙
- var로 선언한 프로퍼티에만 사용할 수 있다.
- 클래스 몸체에 선언한 프로퍼티에만 사용할 수 있다. 주 생성자에는 사용할 수 없다.
- 사용자 정의 getter/setter를 사용하지 않은 프로퍼티에만 사용할 수 있다.
- null 허용 프로퍼티에는 사용할 수 없다.
- 기초 타입 프로퍼티에는 사용할 수 없다.
by lazy
초기화를 늦게하는 Delegated 프로퍼티로써, 프로퍼티에 대한 getter/setter를 위임하여 위임받은 객체로 명령을 수행한다.
class User {
val name: String by lazy {
println("return name lazy")
"Lazy"
}
val age: Int by lazy {
println("return age lazy")
27
}
init {
println("user init")
}
constructor() {
println("user sub constructor")
}
}
fun main(args: Array<String>) {
val user = User()
println("name : ${user.name}")
println("age : ${user.age}")
}
실행결과
user init
user sub constructor
return name lazy
name : Lazy
return age lazy
age : 27
사용 규칙
- 호출 시점에 초기화 진행.
- val로 선언한 프로퍼티에만 사용 가능
- 클래스 몸체 이외에 최상위 레벨에서 사용 가능
- 기초 타입에도 사용 가능
'Kotlin' 카테고리의 다른 글
코틀린 제네릭 (가변성, 스타 프로젝션, reified) (0) | 2019.11.30 |
---|---|
코틀린 object (0) | 2019.08.02 |
코틀린 한정클래스 (Sealed) (0) | 2019.08.02 |
코틀린 Unit vs Nothing (0) | 2019.08.02 |
코틀린 재귀함수 tailrec (0) | 2019.08.02 |
Comments