컴퓨터 언어/코틀린

[Kotlin] 코틀린 변수의 활용 (상수, 늦은 초기화,지연 대리자)const, lateinit, lazy by { }

훈츠 2020. 2. 24. 15:58
반응형

안녕하세요. 훈츠 입니다. 이번 시간에는 변수에 선언에 대해 알아보도록 하겠습니다. 변수 관련해서 앞선 포스팅 2개를 했는데요. 오늘은 조금더 고급 스러운 변수 선언에 대해 알려 드리도록 하겠습니다. 바로 상수, 늦은 초기화, 초기화의 지연 입니다. 앞선 포스팅 한번씩 보시고 오셔도 도움이 될듯하여, 링크 붙였습니다. 

https://rain2002kr.tistory.com/62?category=361958

 

[Kotiln] 코틀린 변수와 자료형

안녕하세요. 훈츠 입니다. 이번 시간에는 코틀린의 자료형에 대해 설명 드리겠습니다. 코틀린은 자바를 대체할 목적으로 개발 되어 졌기 때문에, 자바에서 자주 발생하는 nullpointException 에러를 막는 방법도..

rain2002kr.tistory.com

https://rain2002kr.tistory.com/93?category=361958

 

[Kotiln] 코틀린 nullable 변수 처리

안녕하세요. 훈츠 입니다. 금일은 nullable 변수에 대한 처리에 대해 알아보도록 하겠습니다. Nullable 연산자 종류 [ ?. null safe , ?: 엘비스 , !! null 어소션] ?. null safe 연산자 (마치 if 문 처럼 동작합..

rain2002kr.tistory.com

상수 (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

 

 

반응형