Post

[TIL] 개인 프로젝트 - '키오스크 프로젝트' 후기

[TIL] 개인 프로젝트 - '키오스크 프로젝트' 후기

1. 키오스크 프로젝트

자바의 흐름 제어객체 지향 설계를 직접 적용해보기 위해 키오스크 프로젝트를 시작해보았습니다
그리고 이전의 계산기 프로젝트를 진행해보며 배웠던 예외 처리, 캡슐화 등 복습도 해보구요



2. 깃허브로 형상 관리

img

본격적으로 프로젝트를 시작하기 전에 깃허브로 형상 관리를 어떻게 할지 생각해보았습니다

  • feat: 새로운 기능 추가
  • docs: 문서 내용 수정 (README.md 등)
  • chore: 주석 및 변수명 등등 로직과 관련없는 코드 수정
  • refactor: 코드 구조에 변화가 있지만 전체적인 흐름에는 변화X
  • fix: 발견된 문제 해결

알고있는 커밋 컨벤션의 주 용도 5가지를 위처럼 정해서 커밋하도록 정했습니다
만약 팀 프로젝트를 하게 될 경우, 팀원과의 소통하며 공통적인 커밋 컨벤션을 정할 필요가 있어보입니다

그리고 브랜치 또한 각 기능 및 목표별로 나누어서 사용했습니다
dev/lv2, fix, chore/update-and-refact, ..등 이번에도 개인 프로젝트라서 병합 문제는 없었습니다


2-1. 새로운 지식 : 이슈 번호

img

  • 앞서 형상 관리처럼 커밋 컨벤션 앞에 태그(ex. #15)를 붙이면서 커밋을 하게 되었습니다

같은 개인 프로젝트를 진행하는 팀원분의 깃허브 저장소를 구경해보니 커밋 앞에 #을 붙이더라구요
궁금해서 연결된 링크를 눌러보니 깃허브 저장소의 Issue탭으로 넘어갔었습니다

Issue를 처음 사용해보았는데 상당히 유용한 것 같습니다, 위처럼 어떤 이슈에 따라 커밋을 한건지 알아보기도 쉽구요
다른 사람의 저장소에 있는 Issue에 문제점 및 개선점을 작성하여 기여하는 것도 가능한 것 같습니다



3. 프로젝트 시작

img

각 단계별의 주 내용을 요약하면 다음과 같습니다

  • Lv1 : Scanner로 받은 입력에 따라 출력 및 프로그램 종료
  • Lv2 : List에 데이터 저장 및 불러오기
  • Lv3 : Main에서 진행되던 로직을 클래스에 분리하여 실행
  • Lv4 : 각 메뉴의 정보가 저장되는 클래스를 생성한 뒤 관리하도록 변경
  • Lv5 : 데이터 캡슐화
  • Lv6 (Challenge1) : 클래스간 역할 분리 (장바구니 역할의 Cart 클래스 추가), 예외 처리
  • Lv7 (Challenge2) : Enum, Lambda, Stream 활용

5단계까지는 문제없이 팍팍 나아갔지만 챌린지로 넘어오니 점점 막히는 느낌이 들더라구요


3-1. 진행하며 고민했던 점

6단계에서는 장바구니 역할의 클래스도 추가해야 됩니다
그리고 로직도 순차적으로 흐르지 않고 이전의 화면으로 넘어가야 되기도 하기 때문에 고민을 조금 했습니다

  • 장바구니 클래스 / Cart.java
    5단계까지는 List 객체가 장바구니 역할을 해주었다면 6단계는 Cart 클래스가 이 역할을 이어받습니다
    그리고 Cart 클래스가 할 수 있는 메서드를 넣어주고… 장바구니의 메뉴 관리는 Map을 사용했습니다

    List를 사용할지 아니면 Map을 사용할지 고민했는데, 각각 생각해본 내용은 다음과 같습니다

    • List : 장바구니에 들어가는 객체의 정보를 나타내는 별도의 클래스 추가
    • Map : <객체, 갯수>를 저장하는 Map객체를 사용

    여기서 저는 조금 더 단순하게 제어하기 쉬운 Map 객체를 사용하여 관리했습니다

  • 흐름 제어
    이제 [ 카테고리 선택 / 메뉴 선택 / 장바구니 확인 및 결제 ] 이 3가지가 순차적으로 흐르지 않습니다
    그래서 어떻게 원하는 흐름으로 바꾸어가며 진행할지 고민해보고… 단순하게 if문으로 제어를 해보기로 했습니다

    int flag를 선언하고, flag의 값에 따라 정해진 흐름으로 넘어가도록 if문을 작성해보니까..
    어차피 키오스크는 while문으로 계속 반복되기 때문에 이전 선택으로 되돌아가는건 매우 쉬운일이 되었습니다


이 외에도 처음 메뉴 항목 초기화를 JSON으로 처리해볼까 싶었는데 별도의 라이브러리를 받아서 넣어줘야 하더라구요
새로운 시도를 해보려고 시간을 꽤 많이 소비했지만 프로젝트의 목적과 연관이 거의 없던 느낌이라 제외했습니다


3-2. 아쉬웠던 점

지금으로써 생각나는 아쉬웠던 점은 2가지가 있습니다

  1. 콘솔 출력 메서드를 분리 X Kiosk의 메인 흐름에 콘솔을 출력하는 메서드가 너무 많아서 정리가 잘 안되었습니다
    그나마 카테고리, 메뉴 선택은 분리했지만 장바구니와 결제하는 것도 분리하면 좋지 않았을까 싶습니다

  2. 제네릭을 사용 X 글에는 적지 않았지만 7단계의 목적에 “제네릭을 활용”하는 것이 있었습니다
    어떻게 사용해야하는지 고민하다가 결국 사용하지 못해서 아직 제네릭에 대해 잘 알지 못한다는 생각이 들었네요

    이 부분에 대해서는 조만간 새로 배워서 블로그의 TIL 또는 Java 카테고리에 포스트를 작성해야겠습니다

This post is licensed under CC BY 4.0 by the author.