상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
수정하기 - 코틀린의 lateinit과 lazy의 차이는 무엇인가요?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
코틀린(Kotlin)에서는 변수를 초기화하는 방법으로 `lateinit`과 `lazy`를 제공하고 있습니다. 이 두 가지는 각각의 용도와 특성이 다르기 때문에, 상황에 맞게 적절히 선택하여 <a href='https://sangseek.com/sangseeks/사/ko'>사</a>용하는 것이 중요합니다. 아래에서 `lateinit`과 `lazy`의 차이점에 대해 자세히 설명하겠습니다. 1. `lateinit` `lateinit`은 변수를 나중에 초기화할 것임을 명시하는 키워드입니다. 주로 `var`로 선언된 가변 변수에 사용되며, 초기화가 지연되지만, 반드시 나중에 초기화해야 합니다. `lateinit`을 사용할 수 있는 조건은 다음과 같습니다: - 변수는 `var`로 선언되어야 합니다. - 기본형(Primitive Type)에는 사용할 수 없습니다. 즉, `Int`, `Double`, `Boolean` 등과 같은 기본형 타입에는 사용할 수 없습니다. - 변수를 사용하기 전에 반드시 초기화해야 하며, 초기화되지 않은 상태에서 접근하면 `UninitializedPropertyAccessException`이 발생합니다. 예시: ```kotlin class Example { lateinit var name: String fun initializeName() { name = "Kotlin" } fun printName() { if (::name.isInitialized) { println(name) } else { println("Name is not initialized") } } } ``` 위의 예시에서 `name` 변수는 `lateinit`으로 선언되어 있으며, `initializeName` 메서드를 통해 나중에 초기화됩니다. `printName` 메서드에서는 `isInitialized`를 사용하여 변수가 초기화되었는지 확인할 수 있습니다. 2. `lazy` `lazy`는 변수를 처음 사용할 때 초기화하는 <a href='https://sangseek.com/sangseeks/지연 초기화/ko'>지연 초기화</a>(lazy initialization)를 제공합니다. `lazy`는 `val`로 선언된 불변 변수에만 사용할 수 있으며, 초기화는 <a href='https://sangseek.com/sangseeks/스레드 안전/ko'>스레드 안전</a>(thread-safe)하게 이루어집니다. 즉, 여러 스레드에서 동시에 접근하더라도 안전하게 초기화됩니다. `lazy`는 다음과 같은 특징을 가지고 있습니다: - `val`로 선언된 변수에만 사용할 수 있습니다. - 초기화는 변수가 처음으로 사용될 때까지 지연됩니다. - 초기화 블록은 한 번만 실행되며, 이후에는 캐시된 값을 반환합니다. 예시: ```kotlin class Example { val name: String by lazy { println("Initializing name") "Kotlin" } fun printName() { println(name) } } ``` 위의 예시에서 `name` 변수는 `lazy`로 선언되어 있으며, `printName` 메서드가 호출될 때 처음으로 사용되면 초기화됩니다. 초기화 블록이 실행되며, 이후에는 캐시된 값이 반환됩니다. 3. 주요 차이점 요약 | 특성 | `lateinit` | `lazy` | |------------------|----------------------------------|------------------------------------| | 선언 방식 | `var`로 선언 | `val`로 선언 | | 초기화 시점 | 나중에 명시적으로 초기화 필요 | 처음 사용될 때 자동으로 초기화 | | 기본형 사용 가능 여부 | 불가능 | 불가능 | | 초기화 여부 확인 | `isInitialized`로 확인 가능 | 항상 초기화된 상태로 사용 가능 | | 스레드 안전성 | 스레드 안전하지 않음 | 스레드 안전함 | 결론 `lateinit`과 `lazy`는 각각의 상황에 맞게 사용해야 합니다. `lateinit`은 나중에 초기화할 필요가 있는 가변 변수에 적합하며, `lazy`는 초기화가 지연되어야 하는 불변 변수에 적합합니다. 이 두 가지를 적절히 활용하면 코틀린에서 더 안전하고 효율적인 코드를 작성할 수 있습니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기