반응형
안녕하세요. 훈츠 입니다. 이번 시간에는 변수에 선언에 대해 알아보도록 하겠습니다. 변수 관련해서 앞선 포스팅 2개를 했는데요. 오늘은 조금더 고급 스러운 변수 선언에 대해 알려 드리도록 하겠습니다. 바로 상수, 늦은 초기화, 초기화의 지연 입니다. 앞선 포스팅 한번씩 보시고 오셔도 도움이 될듯하여, 링크 붙였습니다.
https://rain2002kr.tistory.com/62?category=361958
https://rain2002kr.tistory.com/93?category=361958
상수 (const)
변수와 달리 런타임시 객체의 생성없이 메모리에 값을 고정하므로써 성능이 향상 됩니다.
- 런타임시 객체의 생성없이 메모리에 값을 고정하므로써 성능이 향상됨.
- const val number , 기본 자료형만 가능 합니다. 클래스 객체는 담을수 없습니다.
- class 내부 에서는 compainon object 안에 선언 해야 합니다.
- 대문자와 언더바로 상수 선언 합니다.
class FoodCourt {
fun searchPrice(foodName : String) {
val price = when(foodName)
{
FOOD_BLACK_NUDLE -> 6000
FOOD_RED_NUDLE -> 7000
FOOD_FIRED_RICE -> 8000
else -> 0
}
println("${foodName}의 가격은 ${price}원 입니다.")
}
companion object {
const val FOOD_BLACK_NUDLE = "짜장면"
const val FOOD_RED_NUDLE = "짬뽕"
const val FOOD_FIRED_RICE = "볶음밥"
}
}
fun main() {
val a = FoodCourt()
a.searchPrice(FoodCourt.FOOD_BLACK_NUDLE)
a.searchPrice(FoodCourt.FOOD_RED_NUDLE)
a.searchPrice(FoodCourt.FOOD_FIRED_RICE)
}
//출력화면
짜장면의 가격은 6000원 입니다.
짬뽕의 가격은 7000원 입니다.
볶음밥의 가격은 8000원 입니다.
기능적으로 변수를 사용해도 결과는 같지만, 성능 향상을 시킬수 있다는 장점이 있습니다.
늦은 초기화 (lateinit)
초기화를 늦출수 있습니다. 하지만, String 클래스에만 사용이 가능 합니다.
- 초기값 할당 전까지 변수를 사용 할수 없습니다.
- 기본 자료형에는 사용 불가, *String 클래스에만 사용 가능 합니다.
- 초기화 여부 확인 가능 합니다.
- ::a.isinitalized
fun main() {
val a = LateInitSample()
println(a.getLateinitText())
a.text = "새로 할당한 값"
println(a.getLateinitText())
}
class LateInitSample {
lateinit var text:String
fun getLateinitText():String{
if(::text.isInitialized){
return text
}else {
return "기본값"
}
}
}
//출력화면
기본값
새로 할당한 값
지연 대리자 (lazy delegate properties)
초기화를 자동으로 늦춰주는 지연 대리자는, 코드의 실행 시간을 최적화 할수 있는 코드 입니다. 람다 함수로 초기화가 진행되므로 함수 안에 여러가지 문장을 넣어도 맨마지막 실행문이 return 됩니다.
- val a : Int by lazy { 9 }
- 코드의 최적화가 가능합니다.
fun main() {
val number : Int by lazy {
println("초기화를 합니다. ")
7
}
println("코드를 시작합니다. ")
println(number)
println(number)
}
//출력화면
코드를 시작합니다.
초기화를 합니다.
7
7
'컴퓨터 언어 > 코틀린' 카테고리의 다른 글
[Kotiln] 코틀린 전체 소개 (0) | 2020.04.04 |
---|---|
[Kotlin] 코틀린 컬렉션 클래스 (collection) (0) | 2020.02.24 |
[Kotlin] 코틀린 데이터 & 이늄 클래스 (data & enum class) (0) | 2020.02.22 |
[Kotiln] 코틀린 중첩 클래스와 내부 클래스 (0) | 2020.02.21 |
[Kotiln] 코틀린 함수의 활용 Vararg (0) | 2020.02.19 |