본문 바로가기

Java and Android/Android Kotlin

Android Kotlin - 상수, lateinit, val by lazy{}

1. 상수

 : 컴파일 시점에 결정되어 절대 바꿀 수 없는 값으로

  const val로 선언

  상수로 선언될 수 있는 것은 기본자료형(string 포함)만 가능하며

  런타임에 생성될 수 있는 일반적인 다른 클래스의 객체들은 담을 수 없다 

  상수는 클래스의 속성이나 지역변수등으로는 사용할 수 없으며

  반드시 companion object안에 선언하여 객체의 생성과 관계없이

  클래스와 관계된 고정적인 값으로만 사용이 가능하다(자바의 static과 비슷)

  상수의 이름을 만들때는 의례적으로 대분자와 언더바를 사용한 표기법을 사용하여

  상수임을 알려준다

 

 

 - 그럼 val FOOD_PASTER 처럼 변수를 쓰지 않는 이유는?

 어떤 클래스 안의 변수가 고정적이라면 상수를 쓰는것이 성능 면에서 최적화되어있다

 예를 들어 변수를 쓰면 변수에 접근하기 위해서는 foodCourt().변수이름 과 같이 인스턴스 객체를 생성해야하지만

 상수를 쓰면 FoodCourt.상수이름 처럼 인스턴스 객체 생성없이 곧바로 클래스에 접근하여 메모리에 값을 고정하고

 상수를 가져올 수 있다3

 

 

2. lateinit var

: 일단 변수만 선언하고 초기값의 할당은 나중에 할 수 있도록 함

  초기값 할당 전까지 변수를 사용할 수 없으며

  기본 자료형에는 사용할 수 없음(But String 클래스는 사용가능)

  또한 lateinit 변수에 초기화를 하였는지 여부를 확인할 때는

   ::a.isInitalized로 확인이 가능하다

 

 

 

3. lazy delegate properties(지연 대리자 속성)

 :  val a : Int by lazy{ 7 }

이처럼 변수 선언 val(var x)와 자료형 뒤에 by lazy{ 할당값 } 형태로 쓰이며 람다함수{}를 활용한다

선언시 변수를 초기화 하는 것이 아니라

실제 실행시 a 변수를 사용하는 시점에  초가화 과정을 진행함으로써 코드의 실행시간을 최적화한다

 

*람다함수로 초기화가 진행되므로 함수안에 여러개의 구문이 들어갈 수 있지만 맨 마지막 값이

변수에 할당 된다