본문 바로가기
TIL

TIL - 23.12.14

by JHBang 2023. 12. 15.

내일이 과제 제출날이지만 오늘 학교 수업이 있어서 시간이 촉박했다. 

 

어제는 졸업논문을 작성하고 교수님께 검토받느라 TIL을 쓸 시간이 없었다.

 

즉 오늘 오후에 과제를 어느정도 끝내 놔야 했다.

 

과제의 진행도가 많아 간단하게 발생했던 문제와 해결한 방법을 적어놓고 코드는 깃허브에 자세히 적어놓을 예정이다.

 

 

class Cart {
    var selectedMenuNum: Int = 0
    var myCart: MutableList<MenuInfo> = mutableListOf()

    fun printMenuInCart(){
        var sumPrice = 0.0
        for(myMenu in myCart){
            println("${myMenu.name}")
            println("          Price: ${myMenu.price}")
            sumPrice += myMenu.price
        }
        println("          Total Price: ${sumPrice}")
    }
    fun addMenuInCart(selectedMenuNum: Int){

    }
}

 

오류는 장바구니 클래스 사용중에 발생했다.

 

먼저 myCart라는 리스트는 제품정보를 담은 클래스 객체가 저장되는 리스트이다.

 

각각의 메뉴 클래스에서 사용자가 선택한 제품을 인덱스로 접근해서 저 리스트 안에 집어넣는다.

 

printMenuInCart 메소드는 카트에 담긴 제품을 출력하는 함수이다.

 

 

return if (option == 1) burgerList[(choice*2)]
else if(option == 2) burgerList[choice*2-1]

BurgerMenu.kt

 

이런식으로 인덱스로 접근해서 반환한다 이 반환된 클래스 객체는

cart.myCart.add(choosedMenu.printMenu())

이렇게 MenuControl 클래스에서 add를 이용해 myCart 안에 집어넣는다. 

 

그리고 printMenuInCart 메소드는 각 카테고리 메뉴판 아래에 출력해서 장바구니를 항상 확인할 수 있도록 하려고 했으나

 

myCart 리스트가 출력이 되지 않았다.

 

정확히는 myCart리스트에 정보가 들어가지 않아 printMenuInCart 메소드 내부 for문이 돌아가지 않았던 것이다.

 

원인을 찾기 위해 튜터님께도 물어보고, 구글링도 해 봤지만 별다른 소득은 없었다. 

 

이때 불현듯 떠오른 아이디어가 객체를 인스턴스화 할 때 객체 내부 프로퍼티도 초기값으로 초기화될지도 모른다는 것이였다. 만약 내 생각이 맞다면 BurgerMenu 클래스와 MenuControl 클래스 모두 Cart클래스를 인스턴스화 하기 때문에 계속해서 myCart가 빈 리스트로 선언되고 있는 중일 것이였다.

 

구글링을 해 보니 내 생각은 맞았고, 오류의 원인을 알았으니 해결을 해야 했다.

 

해결법은 방법을 좀 찾아보니 여러 클래스에서 한 클래스의 메소드나 프로퍼티를 접근할  땐 object로 선언하면 사용이 가능하단 걸 알았다. 

 

object Cart {
    var selectedMenuNum: Int = 0
    var myCart: MutableList<MenuInfo> = mutableListOf()
    var sumPrice = 0.0
    fun printMenuInCart(){
        var totalPrice = 0.0
        var count: Int = 1
        println("======================================")
        for(myMenu in myCart){
            println("$count. ${myMenu.name}")
            println("----------Price: ${myMenu.price}")

            totalPrice += myMenu.price
            count++
        }
        println("======================================")
        println(">>>> Total Price: ${round(totalPrice * 10) / 10}")
        sumPrice = totalPrice
    }
}

 

계산을 위해 가격 총 합을 사용할 수 있도록 밖으로 빼 두었다.

 

 

'TIL' 카테고리의 다른 글

TIL - 23.12.26  (1) 2023.12.26
TIL - 23.12.20  (1) 2023.12.20
TIL - 23.12.19  (1) 2023.12.19
TIL - 23.12.18  (0) 2023.12.18
TIL - 23.12.12  (0) 2023.12.12