일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
31 |
- 안드로이드 스튜디오 custom dialog
- 안드로이드 스튜디오 tts
- 안드로이드 스튜디오 인터넷 연결 확인
- 자바 스레드 예제
- apache nginx
- 안드로이드 디자인패턴
- 디자인 패턴 예제
- LifeCycle
- 아파치 엔진엑스
- AAC
- java
- 리사이클러뷰 아이템 재사용
- java thread 예제
- Kotlin
- Thread
- 객체지향 프로그래밍 5가지 원칙
- recyclerview item recycle
- 안드로이드 스튜디오 반복되는 레이아웃 코드
- dagger error
- 다른 객체 리스트의 비교
- 아파치란
- 안드로이드 스튜디오 인터넷 연결 안되어 있을 때
- apache란
- 안드로이드 스튜디오 커스텀 다이얼로그
- 변수
- 안드로이드 스튜디오 style
- hilt error
- savedinstancestate
- edittext 연결
- 이중for문 사용 안하기
- Today
- Total
Sam Story
늦은 초기화 lateinit var , by lazy 본문
오늘은 늦은 초기화 lateinit var , by lazy 두가지에 대해서 포스팅 해보겠다.
늦은초기화
코틀린에서 늦은 초기화는 변수를 선언할 때 값을 바로 할당하지 않고 나중에 할당하는 것을 말한다.
늦은 초기화를 사용하는 이유는 메모리 효율성과 코드의 가독성 및 유연성을 높이기 위해서이다.
그럼 이런 늦은 초기화는 왜 사용하는가?
1. 초기화 시점 제어
모든 변수를 객체 생성 시점에 초기화할 필요는 없기 때문에 필요한 시점에만 초기화하여 프로그램의 성능을 최적화 한다.
예를 들어, View나 네트워크 요청처럼 비용이 큰 초기화 작업은 실제로 필요할 때까지 미뤄두는 것이 효율적이다.
2. 메모리 절약
변수를 늦게 초기화 하면 메모리 낭비를 줄일 수 있다.
초기화하지 않아도 되는 변수를 미리 할당하지 않고 필요할 때만 초기화해서 메모리를 사용한다.
3. 가독성 및 유지보수성 향상
lateinit과 lazy를 사용하면 초기화 로직을 분리하여 코드의 가독성과 유지보수성을 높일 수 있다.
예를 들어, 클래스의 여러 변수를 생성자에서 전부 초기화하는 것보다,
실제로 해당 변수를 필요로 하는 시점에 명확히 초기화하는 것이 더 직관적일 수 있다.
4. Null 안정성 확보
lateinit을 사용하면 nullable 변수를 사용하지 않고도 초기화 지연을 구현할 수 있다.
예를 들어, lateinit을 사용하면 null 검사를 할 필요 없이 변수를 초기화할 수 있어,
null로 인해 발생할 수 있는 오류를 방지할 수 있다.
lateinit var
lateinit는 변수를 선언할 때 초기화하지 않고, 나중에 초기화 할 수 있도록 한다.
주로 var 변수에 사용되며, nullable이 아닌 속성에 사용한다.
View 객체를 lateinit으로 선언해, onCreate 메서드 내에서 나중에 초기화하는 경우가 많다.
lateinit var a: String
fun main() {
a = "lateinit var"
println(a)
}
실행결과
※ 주의할 점
- lateinit는 기본 자료형(원시타입 : Int, Double 등)에는 사용할 수 없고, 참조 타입에만 사용할 수 있다.
- 초기화하지 않고 사용하려고 하면 UninitializedPropertyAccessException 예외가 발생한다.
- var의 속성을 띄고있기 때문에 다른값으로 초기화가 가능하다.
by Lazy
lazy는 val 변수에 사용하며, 처음 호출될 때 초기화가 이루어지는 지연 초기화 방식이다.
lazy는 주로 값을 처음 사용할 때에만 초기화가 필요하고, 한 번 초기화 후 변경되지 않는 경우에 유용하다.
val a: String by lazy {
"by lazy"
}
fun main() {
// 처음 호출될 때 초기화가 이루어짐.
println(a) // 여기서 초기화가 이루어짐
println(a) // 이미 초기화된 값을 재사용
}
실행결과
※ 특징
- lazy는 스레드 안전 모드를 지원한다. 여러 스레드에서 안전하게 초기화할 수 있다.
- 첫 번째 호출 이후에는 값을 캐시하므로 다음 호출 시 초기화된 값을 그대로 사용한다.
- val 이기 때문에 한번 초기화한 값을 다른 값으로 다시 초기화 할 수 없다.
늦은 초기화는 필요할 때만 초기화하여 성능을 최적화하고,
코드 가독성을 높이며, null 사용을 줄이는 데 도움이 된다.
네트워크 요청, UI 컴포넌트 초기화 같은 상황에서 이러한 초기화 방식이 특히 유용하다.
'Kotlin' 카테고리의 다른 글
코루틴 (Coroutine) (1) | 2025.02.05 |
---|---|
Kotlin 기본 생성자 오버로딩 (1) | 2024.04.20 |
Kotlin 조건문 (0) | 2024.02.02 |
Kotlin 변수와 자료형 (0) | 2024.02.01 |