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 변수를 사용하는 시점에 초가화 과정을 진행함으로써 코드의 실행시간을 최적화한다
*람다함수로 초기화가 진행되므로 함수안에 여러개의 구문이 들어갈 수 있지만 맨 마지막 값이
변수에 할당 된다
'Java and Android > Android Kotlin' 카테고리의 다른 글
Android Kotlin -실습예제(2) - fragment.xml 디자인 (0) | 2021.01.10 |
---|---|
Android Kotlin - 실습예제(1) (0) | 2021.01.09 |
Android Kotlin - 컬렉션함수(flatMap, getOrElse(), zip) (2) | 2021.01.05 |
Android Kotlin - 컬렉션함수(associateBy, groupBy, partition) (0) | 2021.01.05 |
Android Kotlin - 컬렉션함수 (0) | 2021.01.05 |