코틀린

[Youtube DiMo] 29강. 변수

iseohyun 2022. 5. 3.

목차

    [29강] https://youtu.be/4LnpxYauzVE

     

    1. Const

    fun main() {
        val foodCourt = FoodCourt()
        
        foodCourt.getPrice(FoodCourt.FOOD_PASTA)
        foodCourt.getPrice(FoodCourt.FOOD_STEAK)
        foodCourt.getPrice(FoodCourt.FOOD_PIZZA)
    }
    
    class FoodCourt {
        companion object {
            const val FOOD_PASTA = "파스타"
            const val FOOD_STEAK = "스테이크"
            const val FOOD_PIZZA = "피자"
        }
        
        fun getPrice(foodName: String) {
            val cost = when(foodName) {
                FOOD_PASTA -> 13000
                FOOD_STEAK -> 25000
                FOOD_PIZZA -> 15000
                else -> 0
            }
            println(foodName + "의 가격은 " + cost + "원 입니다.")
        }
    }
    파스타의 가격은 13000원 입니다.
    스테이크의 가격은 25000원 입니다.
    피자의 가격은 15000원 입니다.

     

     

    제약조건

    기본단위(Byte, Int, Float, Double 등)과 String외 사용불가
    local에서 선언 불가
    //const val x = MyObj(2)
    //Const 'val' has type 'MyObj'. Only primitives and String are allowed
    
    fun main() {
        val a = MyObj(1)
        val b = MyObj(2)
        // Modifier 'const' is not applicable to 'local variable'
    
        // a = b // Val cannot be reassigned
        println(a.id)
        a.id = 10
        println(a.id)
    }
    
    class MyObj(var id: Int)
    1
    10

     

     

    2. LateInit

    fun main() {
        //'lateinit' modifier is allowed only on mutable local variables
        //'lateinit' modifier is not allowed on local variables of primitive types
        var a = MyObj()
        a.print()
        a.name = "새 이름"
        a.print()
    }
    
    class MyObj() {
    	lateinit var name: String
    	fun print() {
            if(::name.isInitialized){
                println(name)
            }else{
                println("초기화 안됨")
            }
        }
    }
    초기화 안됨
    새 이름

     

    3. Lazy

    수행속도를 위해 객체 필요시에 선언 됩니다.

    fun main() {
        val a : MyObj by lazy {
            println("초기화를 시작합니다.")
            MyObj("신규 1")
        }
        val b = MyObj("신규 2")
        
        println("=== 프로그램 실행 ===")
        a.print()
        b.print()
    }
    
    class MyObj(var name: String) {
        init {
            println("생성자 실행 : " + name)
        }
        
    	fun print() {
    		println(name)
        }
    }
    생성자 실행 : 신규 2
    === 프로그램 실행 ===
    초기화를 시작합니다.
    생성자 실행 : 신규 1
    신규 1
    신규 2

    댓글