-
Notifications
You must be signed in to change notification settings - Fork 8
23. late, lazy 초기화
VintageAppMaker edited this page Dec 27, 2018
·
2 revisions
- [lateinit]
- lateinit 예약어는 클래스에서 초기화없이 [변수 : 형]만으로 선언가능하다.
- var만 사용가능. 변수형이 nullable 아니더라도 컴파일가능
- primitive 형은 불가능함
- [lazy]
- 코드 어디선가 사용할 때, 1회 초기화 실행된다(안드로이드에서 위젯 초기화시 유리).
- val로 선언
- primitive 형도 가능함.
- 초기화 실행 시, 일련의 코딩도 가능하다.
-
소스코드
fun main (args : Array <String>){ var l : LateInitTest = LateInitTest() l.Test() var l2 : LazyInitTest = LazyInitTest() l2.Test() } // 코틀린에서는 java와 달리 멤버필드를 반드시 초기화해야 한다. // 아니면 abstract나 lateinit으로 선언해주어야 한다. // 1. var만 사용가능. // 2. 늦은초기화이므로 초기화전에 사용불가 // 3. primitive 형은 불가능함. class LateInitTest { var normalValue: Int = 3 var initTest: Int // "선언 = 초기화"를 안해도됨. lateinit var late: String init { initTest = 0 } fun Test() { this.late = "lateinit 초기화" println(this.late) } } // 1. val로 선언 // 2. 사용하는 시점에서 초기화가 1회 발생 // 3. primitive 형도 가능 class LazyInitTest { val lazy1: String by lazy { "lazyinit 초기화" } val lazy2: Int by lazy { println("1번만 실행") // 값 Random().nextInt(100) } fun Test() { println(lazy1) println(lazy2) println(lazy2) } }
-
디버깅 & 설명
-
왜 사용하는가?
-
Android Studio에 적용하기