인터페이스를 클래스로 바꾸는 법을 알아냈다!
interface MenuItem {
val name: String
val price: Int
val description: String
fun displayInfo()
}
이걸 오픈 클래스로 바꾸려면,
open class TheMenu(
override val name: String,
override val price: Int,
override val description: String
) : MenuItem {
override fun displayInfo() {
println("음식 이름: $name")
println("가격: $price 원")
println("설명: $description")
}
}
이녀석을 메뉴아이템으로 바꿔치면 된다!
open class MenuItem(
open val name: String,
open val price: Int,
open val description: String
) {
open fun displayInfo() {
println("음식 이름: $name")
println("가격: $price 원")
println("설명: $description")
}
}
그러니까, 메뉴아이템 인터페이스를 어제 만들었던 오픈 클래스 더메뉴랑 합쳐버린 것이다.
확실히 이러면 양도 줄어들어서 더 관리하기 편할것이다.
그리고 전체적으론
open class MenuItem(
open val name: String,
open val price: Int,
open val description: String
) {
open fun displayInfo() {
println("음식 이름: $name")
println("가격: $price 원")
println("설명: $description")
}
}
class Drink(
name: String,
price: Int,
description: String
) : MenuItem(name, price, description)
class Burger(
name: String,
price: Int,
description: String
) : MenuItem(name, price, description)
class Menu {
val menuItems = listOf(
Burger("와퍼", 8000, "불에 직접 구운 순 쇠고기 패티에 싱싱한 야채가 한가득~ 버거킹의 대표 메뉴!"),
Burger("불고기와퍼", 8000, "불에 직접 구운 순 쇠고기 패티가 들어간 와퍼에 달콤한 불고기 소스까지!"),
Burger("치즈와퍼", 8600, "불에 직접 구운 순 쇠고기 패티가 들어간 와퍼에 고소한 치즈까지!"),
Burger("통새우와퍼", 8800, "불맛 가득 순쇠고기, 갈릭페퍼 통새우, 스파이시토마토소스가 더해진 프리미엄 버거!"),
Drink("콜라", 2900, "코카-콜라로 더 짜릿하게!"),
Drink("사이다", 2900, "나를 깨우는 상쾌함!"),
Drink("아메리카노", 2400, "자연을 담은 버거킹 RA인증커피")
)
fun showMenu() {
println("[ MENU ]")
menuItems.forEachIndexed { index, menuItem ->
println("${index + 1}. ${menuItem.name} | 가격: ${menuItem.price} 원 | 설명: ${menuItem.description}")
}
println("0. 뒤로가기")
print(" ---> ")
}
}
이러면 여러 클래스를 list로 말끔하게 하나로 통합하면서 open class도 전부 적용하는데 성공한것 같다!
그리고 이제 4단계인 새로운 장바구니 추가, 잔액을 추가해야 했는데, 실패했다! 뭐 어짜피 3까지만 하면 되니까!
내일 완성본을 받고 그걸 해부하면 공부해봐야겠다.