지연 초기화

고성욱·2023년 3월 20일
0

안드로이드

목록 보기
19/26

코틀린 지연 초기화

코틀린에서는 변수를 선언할 때 즉시 초기화를 해야 하는데, 때로는 초기화를 뒤로 미루고 싶은 경우가 있습니다. 이때 사용하는 것이 지연 초기화입니다.

lateint

lateinit은 'late initialization'의 약자로, 변수를 선언할 때 초기화하지 않고, 추후에 초기화하는 기능입니다.

lateinit 키워드를 사용하여 변수를 선언할 때 초기화를 하지 않아도 되는 장점이 있습니다. 이는 예를 들어, 객체의 생성자에서 초기화할 수 없는 경우에도 사용할 수 있습니다.

lateinit var name: String

fun initializeName() {
    name = "John"
}

위 코드에서는 lateinit으로 선언된 name 변수를 선언할 때 초기화하지 않았습니다. 대신, 추후 initializeName() 함수를 호출하여 name 변수를 초기화합니다.

Nullable로 선언하는 방법

  • 일반적인 선언방식입니다. 처음에는 null을 입력해두고, 클래스의 다른 메서드 영역에서 값을 입력 합니다.
class Person{
	var name: String? = null
	init{
		name = "Lionel"
	}
	fun process() {
		name?.plus("Messi")
		print("이름의 길이 = ${name?.legth}")
		print("이름의 첫 글자 = ${name?.substring(0,1}")
	}
}

lateinit 특징

  • 변수를 선언할 때 즉시 초기화하지 않아도 됨
  • 추후 초기화 가능
  • nullable로 선언하지 않음

lazy

lazy는 변수를 최초로 사용할 때에만 초기화하는 기능입니다. 이를 통해 불필요한 초기화를 하지 않고 성능을 높일 수 있습니다.

val name: String by lazy {
    println("초기화")
    "John"
}

fun main() {
    println(name)
    println(name)
}

위 코드에서는 name 변수를 선언할 때 lazy 키워드를 사용하여 초기화를 뒤로 미루었습니다. 따라서, name 변수를 최초로 사용할 때에만 초기화가 수행됩니다.

이를 통해, 성능이 더 중요한 상황에서 lazy를 사용하여 불필요한 초기화를 줄일 수 있습니다.

Lazy특징

  • 선언 시에 초기화 코드를 함께 작성하기 때문에 따로 초기화 할 필요 없습니다.
  • lazy로 선언된 변수가 최초 호출되는 시점에 by lazy{} 안에 넣은 값으로 초기화 됩니다. 클래스가 초기화 되더라도 바로 초기화 되지 않고 호출되는 순간 초기화 됩니다.
  • 최초 호출 되는 시점에 초기화 되기 때문에 초기화 리소스가 너무 크면 전체 처리속도에 영향을 미칠수 있으니 복잡한 코드 같은 경우엔 미리 초기화 하는것이 좋습니다.
profile
안드로이드, 파이썬 개발자

0개의 댓글