Kotlin 문법 심화 - 2

두주·2023년 12월 12일
0

TIL

목록 보기
14/58

하루종일 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 이 작동한다.

어제는 메뉴를 클래스로 출력시키는게 목적이었다면,
오늘은 클래스에서 리스트로 변경을 목적으로 공부했다.

아직 데이터 수가 적어서 그런지 왜 리스트로 관리함이 더 나은지는 이해가 잘 되지 않는다.

profile
야옹.

0개의 댓글