[231208] Today I Learned

YoungHyun Kim·2023년 12월 8일
1

TIL ✍️

목록 보기
14/68

키오스크 프로젝트

import Foundation

class MainMenu: MenuRef {

    func printMenu() {
        // 메뉴 출력 부분
        print("""
                *-------------------------------------------------*
                |             [TwoTwoChicken's MENU] |            |
                *-------------------------------------------------*
                | 1. Chickens      | 국내산 닭을 염지해 맛있게 조리한 치킨  |
                | 2. Side Snack    | 치킨과 함께 곁들이면 좋은 메뉴       |
                | 3. Drink         | 콜라, 사이다 등 다양한 음료 메뉴     |
                | 4. Beer          | 치킨의 영원한 단짝, 시원한 맥주      |
                | 0. Finish       | 주문을 종료합니다.                 |
                *-------------------------------------------------*
""")
    }
    
    func choiceMenu() {
        while true {
            guard let input = readLine(), let input = Int(input) else {
                print("❗️ 입력이 잘못되었습니다. 다시 한 번 입력해주세요.")
                continue
            }
            
            switch input {

            case 0:
                print("키오스크를 종료합니다.")
            case 1:
                print("Chicken 메뉴로 이동합니다!")
                ChickenMenu().choiceMenu()
            case 2:
                print("Side Snacks 메뉴로 이동합니다!")
                SideMenu().choiceMenu()
            case 3:
                print("Drink 메뉴로 이동합니다!")
                DrinkMenu().choiceMenu()
            case 4:
                print("Beer 메뉴로 이동합니다!")
                BeerMenu().choiceMenu()
            default:
                print("❗️ 입력이 잘못되었습니다. 다시 한 번 입력해주세요.")
                
            }

            print(printMenu())
        }
    }
    
    func quitMenu() {
        print("🖥️ 키오스크를 종료합니다.")
    }
    
    init() {
        var userMoney: Double = 50.0
        var pocket: [String] = []
        printMenu()
    }
}
  • 이니셜라이저는 함수가 생성되었을 때(생성자를 호출했을 때) 가장 먼저 실행되는 구문이니까, 함수의 최상단에 위치하는게 좋다.
    • 관습적으로 이니셜라이저는 클래스 최상단에 위치함.
  • 이번 과제가 팀을 이뤄서 하는 프로젝트의 첫 경험이었는데, 느낀 점과 더 잘할 수 있었던 점을 아래 나열해보려고 한다.
      1. Git 브랜치 전략에 대해 팀원들과 상의 후 진행했다면 더 깔끔하게 기능 업데이트나 버그 픽스같은 것들을 진행할 수 있었을 것 같다.
      1. 커밋이나 코드 컨벤션을 지키지 않고 진행하는 PR은 의미가 없다.
      1. 커밋과 푸시는 세트가 아니다. 스테이징 에이리어에 자잘한 커밋들은 쌓아두고, 큼직한(?) 업데이트를 기준으로 푸시하는 것이 일반적인 방법이다.
      1. PR 후 merge가 끝난 브랜치는 삭제하는 것이 작업 중 브랜치가 꼬이지 않는 좋은 방법이다.
      1. merge 후 팀원들과 같이 코드의 상태를 한 번 맞춰주는 것이 좋다(싱크를 맞춘다).
      1. 클래스에서 프로토콜을 채택하는 것만이 프로토콜의 사용 방법은 아니다.
      • 클래스나 구조체, 함수의 이니셜라이저의 매개변수에서 프로토콜을 채택한 후, 프로토콜을 사용한 객체라면 매개변수로 사용할 수 있도록 만드는 등의 많은 사용 방법이 존재한다.
profile
iOS 개발자가 되고 싶어요

0개의 댓글