오늘은 먼저 오픈 클래스를 만들어 클래스들을 상속하려고 해봤는데, 먼저 부모를 정한게 아니라 나중에 추가하려고 해서인지 잘 되지 않고 계속 오류가 떠서 굉장히 고생했다. 그래서 우선 난잡한 클래스들을 정리하기 위해서 버거, 드링크 클래스를 버거메뉴, 드링크 메뉴에 집어넣었다.
class Burger(
override val name: String,
override val price: Int,
override val description: String
) : MenuItem {
override fun displayInfo() {
println("버거 이름: $name")
println("가격: $price 원")
println("설명: $description")
}
}
이녀석을 버거메뉴 안으로 옮기고
class Burger(
override val name: String,
override val price: Int,
override val description: String
) : MenuItem {
override fun displayInfo() {
println("버거 이름: $name")
println("가격: $price 원")
println("설명: $description")
}
}
class BurgerMenu {
val menuItems = arrayOf(
Burger("와퍼", 8000, "불에 직접 구운 순 쇠고기 패티에 싱싱한 야채가 한가득~ 버거킹의 대표 메뉴!"),
Burger("불고기와퍼", 8000, "불에 직접 구운 순 쇠고기 패티가 들어간 와퍼에 달콤한 불고기 소스까지!"),
Burger("치즈와퍼", 8600, "불에 직접 구운 순 쇠고기 패티가 들어간 와퍼에 고소한 치즈까지!"),
Burger("통새우와퍼", 8800, "불맛 가득 순쇠고기, 갈릭페퍼 통새우, 스파이시토마토소스가 더해진 프리미엄 버거!")
)
fun showMenu() {
println("[ Burgers MENU ]")
menuItems.forEachIndexed { index, menuItem ->
println("${index + 1}. ${menuItem.name} | 가격: ${menuItem.price} 원 | 설명: ${menuItem.description}")
}
println("0. 뒤로가기")
print(" ---> ")
}
}
이런식으로 하나로 합쳤다.
그리고 openclass가 안되는 이유를 찾아 봤는데, 아무래도 인터페이스가 존재하서 이미 그 역할을 떠맡아서 그렇다는 결론을 내게 되었다.
그래서 인터페이스를 오픈 클래스로 바꾸려고 했는데, 간단할줄로만 알았건만 또 이상한 오류가 뜨면서 잘 작동하지 않는다! 뭐가 문제냐!!
아주아주 오랜 시간이 지나서 인터페이스는그대로 두고 오픈 클래스를 추가하면서 동시에 메뉴를 통합하는것에 성공했다.
결국 인터페이스는 무관했던 것이다! 시간만 날렸다!
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")
}
}
class Drink(
name: String,
price: Int,
description: String
) : TheMenu(name, price, description)
class Burger(
name: String,
price: Int,
description: String
) : TheMenu(name, price, description)
class BurgerMenu {
val menuItems = arrayOf(
Burger("와퍼", 8000, "불에 직접 구운 순 쇠고기 패티에 싱싱한 야채가 한가득~ 버거킹의 대표 메뉴!"),
Burger("불고기와퍼", 8000, "불에 직접 구운 순 쇠고기 패티가 들어간 와퍼에 달콤한 불고기 소스까지!"),
Burger("치즈와퍼", 8600, "불에 직접 구운 순 쇠고기 패티가 들어간 와퍼에 고소한 치즈까지!"),
Burger("통새우와퍼", 8800, "불맛 가득 순쇠고기, 갈릭페퍼 통새우, 스파이시토마토소스가 더해진 프리미엄 버거!")
)
fun showMenu() {
println("[ Burgers MENU ]")
menuItems.forEachIndexed { index, menuItem ->
println("${index + 1}. ${menuItem.name} | 가격: ${menuItem.price} 원 | 설명: ${menuItem.description}")
}
println("0. 뒤로가기")
print(" ---> ")
}
}
class DrinkMenu {
val menuItems = arrayOf(
Drink("콜라", 2900, "코카-콜라로 더 짜릿하게!"),
Drink("사이다", 2900, "나를 깨우는 상쾌함!"),
Drink("아메리카노", 2400, "자연을 담은 버거킹 RA인증커피")
)
fun showMenu() {
println("[ Drink MENU ]")
menuItems.forEachIndexed { index, menuItem ->
println("${index + 1}. ${menuItem.name} | 가격: ${menuItem.price} 원 | 설명: ${menuItem.description}")
}
println("0. 뒤로가기")
print(" ---> ")
}
}
이걸로 class Drink(
name: String,
price: Int,
description: String
) : TheMenu(name, price, description) 여기서 보이듯 open class TheMenu를 : TneMenu라며 수식하는것이 보인다!
거기에다 압축한걸 한층 더 압축하는것도 성공했다. 상속이란게 이렇게 어려울줄은 몰랐다.
다음엔 이것들을 리스트 하나로 관리하도록 짜보려고 한다.