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