Enum

조재민·2023년 7월 30일
0
post-thumbnail
  • 코드 리뷰
  • enum을 활용하여 코드 작성

오늘은 코드 리뷰 시간에 보여줄 코드가 없었다. 전날에 enum에 대해 공부는 했지만, 어떤 식으로 구성을 해야할 지 모르겠어서 코드를 만져보지 못했다. 그래서 오늘 오전에 팀원들의 코드를 보고, 로직 구성을 참고해서 오늘 만들어 볼 예정이다.

enum MainMenu: Int {
    case burgers = 1
    case frozenCustard
    case drinks
    case beer
    case exit
}

enum BurgerMenu: Int {
    case shackburger = 1
    case smokeshack
    case shroomburger
    case cheeseburger
    case hamburger
    case back1
}

enum FrozenCustardMenu: Int {
    case shakes = 1
    case shakeoftheweek
    case redbeenshake
    case floats
    case back2
    
}

enum DrinksMenu: Int {
    case shakemadelemonade = 1
    case freshbrewedicedtea
    case fiftyfifty
    case fountainsoda
    case abitarootbeer
    case bottledwater
    case back3
}

enum BeerMenu: Int {
    case shakemeisterale = 1
    case magpiebrewingco
    case thehandandmalt
    case back4
}

먼저 enum을 사용해서 카테고리를 만들어 주었다.

class KioskMenu {
    func printMenu() {
        print("SHACKSHACK 버거에 오신 것을 환영합니다.")
        print("1. Burgers")
        print("2. Frozen Custard")
        print("3. Drinks")
        print("4. Beer")
        print("5. Exit")
        print("원하시는 메뉴의 번호를 입력해주세요.: ", terminator: "")
    }
    
    func printBurgerMenu() {
        print("====== Burgers =====")
        print("1. Shack Burger   | W 6.9 | 토마토, 양상추, 쉑소스가 토핑된 치즈버거")
        print("2. Smoke Shack    | W 8.9 | 베이컨, 체리 페퍼에 쉑소스가 토핑된 치즈버거")
        print("3. Shroom Burger. | W 9.4 | 몬스터 치즈와 체다 치즈로 속을 채운 베지테리안 버거")
        print("4. Cheese burger. | W 6.9 | 포테이토 번과 비프패티, 치즈가 토핑된 치즈버거")
        print("5. Hamburger      | W 5.4 | 비프패티를 기반으로 야채가 들어간 기본버거")
        print("6. Back")
        print("원하시는 메뉴의 번호를 입력해주세요.: ", terminator: "")
    }
    
    func printFrozenCustardMenu() {
        print("===== Frozen Custard =====")
        print("1. Shaeks           | W 5.9 | 바닐라, 초콜릿, 솔티드 카라멜, 블랙 & 화이트, 스트로베리, 피넛버터, 커피")
        print("2. Smoke Shack      | W 6.5 | 특별한 커스터드 플레이버")
        print("3. Red Been Shake   | W 6.5 | 신선한 커스터드와 함께 우유와 레드빈이 블렌딩 된 시즈널 쉐이크")
        print("4. Floats           | W 5.9 | 루트 비어, 퍼플 카우, 크림시클")
        print("5. Back")
        print("원하시는 메뉴의 번호를 입력해주세요.: ", terminator: "")
    }
    
    func printDrinksMenu() {
        print("===== Drinks =====")
        print("1. Shaek made Lemonade     | Regular W 3.9 Large W 4.5 | 매장에서 직접 만드는 상큼한 레몬에이드(오리지널/시즈널)")
        print("2. Fresh Brewed Iced Tea   | Regular W 3.4 Large W 3.9 | 직접 유기농 홍차를 우려낸 아이스티")
        print("3. Fifty / Fifty           | Regular W 3.5 Large W 4.4 | 레몬에이드와 아이스티의 만남")
        print("4. Fountain Soda           | Regular W 2.7 Large W 3.3 | 코카콜라, 코카콜라 제로, 스프라이트, 환타 오렌지, 환타 그레이프")
        print("5. Abita Root Beer         | W 4.4 | 청량감 있는 독특한 미국식 무알콜 탄산음료")
        print("6. Bottled Water           | W 1.0 | 지리산 암반 대수층으로 만든 프리미엄 생수")
        print("7. Back")
        print("원하시는 메뉴의 번호를 입력해주세요.: ", terminator: "")
    }
    
    func printBeerMenu() {
        print("===== Beer =====")
        print("1. Shake Meister Ale    | W 9.8 | 쉐이크쉑 버거를 위해 뉴욕 브루클린 브루어리에서 특별히 양조한 에일 맥주")
        print("2. Magpie Brewing Co.   | W 6.8 | ")
        print("3. The Hand and Malt    | W 6.8 | ")
        print("4. Back")
        print("원하시는 메뉴의 번호를 입력해주세요.: ", terminator: "")
    }

    func printMainMenuResult(_ result: MainMenu) {
        switch result {
        case .burgers:
            print("Burgers 메뉴를 선택하셨습니다.")
        case .frozenCustard:
            print("Frozen Custard 를 선택하셨습니다.")
        case .drinks:
            print("Drinks 를 선택하셨습니다.")
        case .beer:
            print("Beer 을 선택하셨습니다.")
        case .exit:
            print("종료합니다.")
        }
    }
    
    func printBurgerResult(_ result: BurgerMenu) {
        switch result {
        case .shackburger:
            print("Shack Burger 를 선택하셨습니다.")
        case .smokeshack:
            print("Smoke Shack 를 선택하셨습니다.")
        case .shroomburger:
            print("Shroom Burger 를 선택하셨습니다.")
        case .cheeseburger:
            print("Cheese Burger 를 선택하셨습니다.")
        case .hamburger:
            print("Hamburger 를 선택하셨습니다.")
        case .back1:
            print("메인 메뉴로 돌아갑니다.")
        }
    }
    
    func printFrozenCustardResult(_ result: FrozenCustardMenu) {
        switch result {
        case .shakes:
            print("Shakes 를 선택하셨습니다.")
        case .shakeoftheweek:
            print("Shake of the Week 를 선택하셨습니다.")
        case .redbeenshake:
            print("Red Been Shake 를 선택하셨습니다.")
        case .floats:
            print("Floats 를 선택하셨습니다.")
        case .back2:
            print("메인 메뉴로 돌아갑니다.")
        }
    }
    
    func printDrinksResult(_ result: DrinksMenu) {
        switch result {
        case .shakemadelemonade:
            print("Shake made Lemonade 를 선택하셨습니다.")
        case .freshbrewedicedtea:
            print("Fresh Brewed Iced Tea 를 선택하셨습니다.")
        case .fiftyfifty:
            print("Fifty / Fifty 를 선택하셨습니다.")
        case .fountainsoda:
            print("Fountain Soda 를 선택하셨습니다.")
        case .abitarootbeer:
            print("Abita Root Beer 를 선택하셨습니다.")
        case . bottledwater:
            print("Bottled Water 를 선택하셨습니다.")
        case .back3:
            print("메인 메뉴로 돌아갑니다.")
        }
    }
    
    func printBeerResult(_ result: BeerMenu) {
        switch result {
        case .shakemeisterale:
            print("Shake Meister Ale 를 선택하셨습니다.")
        case .magpiebrewingco:
            print("Magpie Brewing Co. 를 선택하셨습니다.")
        case .thehandandmalt:
            print("The Hand and Malt 를 선택하셨습니다.")
        case .back4:
            print("메인 메뉴로 돌아갑니다.")
        }
    }
}

그 다음 class로 전체 메뉴를 묶어주고 그 안에 각 상세메뉴를 함수를 사용해서 출력이 되게끔 만들어주었다.

var isRunning = true
let menu = KioskMenu()

while isRunning {
    menu.printMenu()

    if let input = readLine(), let choice = Int(input) {
        if let mainMenuChoice = MainMenu(rawValue: choice){
            switch mainMenuChoice {
            case .exit:
                isRunning = false
            
            case .burgers:
                var isBurgerMenuRunning = true
                while isBurgerMenuRunning {
                    menu.printBurgerMenu()
                    if let burgerMenuChoice = BurgerMenu(rawValue: Int(readLine() ?? "0") ?? 0) {
                        if burgerMenuChoice == .back1 {
                            isBurgerMenuRunning = false
                        } else {
                            menu.printBurgerResult(burgerMenuChoice)
                        }
                    } else {
                        print("잘못된 입력입니다. 다시 입력해주세요.")
                    }
                }
            
            case .frozenCustard:
                var isFrozenCustardMenuRunning = true
                while isFrozenCustardMenuRunning {
                    menu.printFrozenCustardMenu()
                    if let frozenCustardMenuChoice =
                        FrozenCustardMenu(rawValue: Int(readLine() ?? "0") ?? 0){
                        if frozenCustardMenuChoice == .back2{
                            isFrozenCustardMenuRunning = false
                        } else {
                            menu.printFrozenCustardResult(frozenCustardMenuChoice)
                        }
                    } else {
                        print("잘못된 입력입니다. 다시 입력해주세요.")
                    }
                }
            
            case .drinks:
                var isDrinkMenuRunning = true
                while isDrinkMenuRunning {
                    menu.printDrinksMenu()
                    if let drinksMenuChoice =
                        DrinksMenu(rawValue: Int(readLine() ?? "0") ?? 0){
                        if drinksMenuChoice == .back3{
                            isDrinkMenuRunning = false
                        } else {
                            menu.printDrinksResult(drinksMenuChoice)
                        }
                    } else {
                        print("잘못된 입력입니다. 다시 입력해주세요.")
                    }
                }
            
            case .beer:
                var isBeerMenuRunning = true
                while isBeerMenuRunning {
                    menu.printBeerMenu()
                    if let beerMenuChoice = BeerMenu(rawValue: Int(readLine() ?? "0") ?? 0){
                        if beerMenuChoice == .back4{
                            isBeerMenuRunning = false
                        } else {
                            menu.printBeerResult(beerMenuChoice)
                        }
                    } else {
                        print("잘못된 입력입니다. 다시 입력해주세요.")
                    }
                }
                
            default:
                menu.printMainMenuResult(mainMenuChoice)
            }
        } else {
            print("잘못된 입력입니다. 다시 입력해주세요.")
        }
    } else {
        print("잘못된 입력입니다. 숫자를 입력해주세요.")
    }
}

그리고 계속 반복되어야 하기 떄문에 while 구문을 사용하여 반복될 수 있도록 코드를 만들어 주었다.

느낀점

최대한 구글링과 지피티를 활용하여 코드를 작성해 본 것이기에 이해가 잘 되지않는 부분들이 많았다. 내일부터는 코드를 분석해보며 제대로 이해가 되지 않았던 문법들을 공부해 볼 생각이다.

profile
“누군가는 너를 사랑하고 있다.”

0개의 댓글

관련 채용 정보