[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
'코틀린' 카테고리의 다른 글
[Youtube DiMo] 31강. 동기처리(마지막) (0) | 2022.05.03 |
---|---|
[Youtube DiMo] 30강. 비트연산 (0) | 2022.05.03 |
[Youtube DiMo] 27-28강. 컬렉션 함수 (0) | 2022.05.03 |
[Youtube DiMo] 26강. Set / Map (0) | 2022.05.03 |
[Youtube DiMo] 25강. Data / Enum (0) | 2022.05.03 |
댓글