하루종일 ArrayList와 싸웠다.
class MenuBurger {
var burgerList = ArrayList<Burger>()
init {
burgerList.addAll(createBurgerList())
}
fun burgerMenu() {
// val shackburger = Shackburger()
// val smokeshack = Smokeshack()
// val mushroomsburger = Mushroomburger()
// val cheeseburger = Cheeseburger()
// val hamburger = Hamburger()
println("[ Burgers MENU ]")
burgerList.forEach { burger ->
burger.displayInfo()
}
// shackburger.displayInfo()
//// burgerList.forEach {burger ->
//// println(burger.recommend.toString() + ". " + burger.name + " |" + burger.price + " ㅣ" + burger.details)
//// }
//// }
// smokeshack.displayInfo()
// mushroomsburger.displayInfo()
// cheeseburger.displayInfo()
// hamburger.displayInfo()
}
// 어쨋든 불러오는 데에는 성공했다. 하지만 이걸 매 번 채워줘야 하는 건 똑같은데 추상 클래스에서 불러올 때
// 알아서 추가되게끔 할 수 없을까?
fun createBurgerList() : List<Burger> {
return listOf(
Shackburger(),
Smokeshack(),
Mushroomburger(),
Cheeseburger(),
Hamburger()
)
}
}
처음 내가 의도한 바는 추상 클래스에서 불러오는 상속 클래스들의 정보를
추상클래스에서 받아올 때 list에 넣고 싶었다.
class Smokeshack : Burger(){
override val recommend: Int
get() = 2
override val name : String
get() = "Smokeshack"
override val price : Double
get() = 8.9
override val details : String
get() = "베이컨, 체리 페퍼에 쉑소스가 토핑된 치즈"
}
추천도, 이름, 가격, 세부 정보를 불러온다.
몇 시간동안 애먹었는데, 추상 클래스에서는 리스트를 사용할 수 없다고 한다.
그래서 위와 같이 추상 클래스를 통해 받은 데이터를 출력하는
MenuBurger 클래스에서 리스트화 했다.
var burgerList = ArrayList<Burger>()
burgerList라는 변수를 만들고 Burger 클래스가 담긴 ArrayList 라고 지정했다.
init { burgerList.addAll(createBurgerList()) }
처음에는 init (초기화) 없이 burgerList.addAll 을 했는데 안되더라.
(왜 안되는지는 모름 초기화 해야된다고 해서 넣으니까 됨)
println("[ Burgers MENU ]")
burgerList.forEach { burger ->
burger.displayInfo()
}
기존 내용을 모두 주석처리 했다.
각 메뉴는 Burger클래스에서 displayInfo로 출력하고 있으니
리스트에서 메뉴를 꺼내와 displayInfo가 사용될 수 있도록 했다.
처음으로 람다식을 적용시켰다.
burgerList 각각의 burger에서 displayInfo()를 실행시켜라는 뜻으로 해석해 사용했다.
fun createBurgerList() : List<Burger> {
return listOf(
Shackburger(),
Smokeshack(),
Mushroomburger(),
Cheeseburger(),
Hamburger()
)
}
리스트를 추가하는 부분
createBurgerList라는 함수를 생성하고,
ArrayList를 두 번 쓸 수 없다는 에러 메세지를 만났다.
어차피 아래는 Burger 클래스를 리스트로 만들어 주는 역할을 하면 되기에
ArrayList를 사용할 필요가 없다.
Burger클래스의 각 요소를 받아, return해줌으로서 addAll 이 작동한다.
어제는 메뉴를 클래스로 출력시키는게 목적이었다면,
오늘은 클래스에서 리스트로 변경을 목적으로 공부했다.
아직 데이터 수가 적어서 그런지 왜 리스트로 관리함이 더 나은지는 이해가 잘 되지 않는다.