Skip to content

Latest commit

Β 

History

History
443 lines (338 loc) Β· 18.4 KB

README.md

File metadata and controls

443 lines (338 loc) Β· 18.4 KB

kotlin-convenience-store-precourse

ν•™μŠ΅ λͺ©ν‘œ

  • κ΄€λ ¨ ν•¨μˆ˜λ₯Ό λ¬Άμ–΄ 클래슀λ₯Ό λ§Œλ“€κ³ , 객체듀이 ν˜‘λ ₯ν•˜μ—¬ ν•˜λ‚˜μ˜ 큰 κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λ„λ‘ ν•œλ‹€.
  • ν΄λž˜μŠ€μ™€ ν•¨μˆ˜μ— λŒ€ν•œ λ‹¨μœ„ ν…ŒμŠ€νŠΈλ₯Ό 톡해 μ˜λ„ν•œ λŒ€λ‘œ μ •ν™•ν•˜κ²Œ μž‘λ™ν•˜λŠ” μ˜μ—­μ„ ν™•λ³΄ν•œλ‹€.
  • 3μ£Ό μ°¨ 곡톡 ν”Όλ“œλ°±μ„ μ΅œλŒ€ν•œ λ°˜μ˜ν•œλ‹€.

λ―Έμ…˜ 진행 방식

  • λ―Έμ…˜μ€ κΈ°λŠ₯ μš”κ΅¬ 사항, ν”„λ‘œκ·Έλž˜λ° μš”κ΅¬ 사항, 과제 진행 μš”κ΅¬ 사항 μ„Έ κ°€μ§€λ‘œ κ΅¬μ„±λ˜μ–΄ μžˆλ‹€.
  • μ„Έ 개의 μš”κ΅¬ 사항을 λ§Œμ‘±ν•˜κΈ° μœ„ν•΄ λ…Έλ ₯ν•œλ‹€. 특히 κΈ°λŠ₯을 κ΅¬ν˜„ν•˜κΈ° 전에 κΈ°λŠ₯ λͺ©λ‘μ„ λ§Œλ“€κ³ , κΈ°λŠ₯ λ‹¨μœ„λ‘œ 컀밋 ν•˜λŠ” λ°©μ‹μœΌλ‘œ μ§„ν–‰ν•œλ‹€.
  • κΈ°λŠ₯ μš”κ΅¬ 사항에 κΈ°μž¬λ˜μ§€ μ•Šμ€ λ‚΄μš©μ€ 슀슀둜 νŒλ‹¨ν•˜μ—¬ κ΅¬ν˜„ν•œλ‹€.

λ―Έμ…˜ 제좜 방법

  • λ―Έμ…˜ κ΅¬ν˜„μ„ μ™„λ£Œν•œ ν›„ GitHub을 톡해 μ œμΆœν•΄μ•Ό ν•œλ‹€.
  • Pull Requestλ₯Ό 생성할 λ•Œ, λ°˜λ“œμ‹œ μ•„λž˜ μ˜ˆμ‹œ 이미지와 같이 gdgoc-skhu-missions 쑰직에 μžˆλŠ” μ €μž₯μ†Œμ— 본인 GitHub 아이디 λΈŒλžœμΉ˜μ— μƒμ„±ν•œλ‹€. pull-request
  • Pull Requestλ₯Ό μƒμ„±ν•œ ν›„, PR의 λ¦¬λ·°μ–΄λ‘œ 미리 λ°°μ •λœ 리뷰어λ₯Ό μΆ”κ°€ν•œλ‹€. μΆ”κ°€ν•˜κ³  λ‚˜μ„œ, 초둝 μŠ€ν„°λ”” λ””μŠ€μ½”λ“œμ˜ μ„±κ³΅νšŒλŒ€ LBP μ±„λ„μ—μ„œ PR 링크와 ν•¨κ»˜ 본인이 배정받은 리뷰어λ₯Ό ν˜ΈμΆœν•œλ‹€.
    reviewer

과제 제좜 μ „ 체크 리슀트

  • κΈ°λŠ₯을 μ˜¬λ°”λ₯΄κ²Œ κ΅¬ν˜„ν–ˆλ”λΌλ„Β μš”κ΅¬ 사항에 λͺ…μ‹œλœ 좜λ ₯ ν˜•μ‹μ„ λ”°λ₯΄μ§€ μ•ŠμœΌλ©΄ 0점을 λ°›κ²Œ λœλ‹€.
  • κΈ°λŠ₯ κ΅¬ν˜„μ„ μ™„λ£Œν•œ ν›„ μ•„λž˜ κ°€μ΄λ“œμ— 따라 λͺ¨λ“  ν…ŒμŠ€νŠΈκ°€ μ„±κ³΅μ μœΌλ‘œ μ‹€ν–‰λ˜λŠ”μ§€ ν™•μΈν•œλ‹€.
  • ν…ŒμŠ€νŠΈκ°€ μ‹€νŒ¨ν•˜λ©΄ μ μˆ˜κ°€ 0점이 λ˜λ―€λ‘œ μ œμΆœν•˜κΈ° 전에 λ°˜λ“œμ‹œ ν™•μΈν•œλ‹€.

ν…ŒμŠ€νŠΈ μ‹€ν–‰ κ°€μ΄λ“œ

  • IntelliJ IDEA λ˜λŠ” Android Studio와 같은 IDEμ—μ„œ Kotlin 1.9.24둜 μ‹€ν–‰λ˜λŠ”μ§€ ν™•μΈν•œλ‹€.
  • ν„°λ―Έλ„μ—μ„œ Mac λ˜λŠ” Linux μ‚¬μš©μžμ˜ 경우 ./gradlew clean testΒ λͺ…령을 μ‹€ν–‰ν•˜κ³ , Windows μ‚¬μš©μžμ˜ 경우 gradlew.bat clean testΒ λ˜λŠ”Β ./gradlew.bat clean testΒ λͺ…령을 μ‹€ν–‰ν•  λ•Œ λͺ¨λ“  ν…ŒμŠ€νŠΈκ°€ μ•„λž˜μ™€ 같이 ν†΅κ³Όν•˜λŠ”μ§€ ν™•μΈν•œλ‹€.
BUILD SUCCESSFUL in 0s

편의점

과제 진행 μš”κ΅¬ 사항

  • λ―Έμ…˜μ€Β νŽΈμ˜μ Β μ €μž₯μ†Œλ₯Ό μƒμ„±ν•˜λŠ” κ²ƒμœΌλ‘œ μ‹œμž‘ν•œλ‹€.
  • κΈ°λŠ₯을 κ΅¬ν˜„ν•˜κΈ° μ „Β README.md에 κ΅¬ν˜„ν•  κΈ°λŠ₯ λͺ©λ‘μ„ 정리해 μΆ”κ°€ν•œλ‹€.
  • Git의 컀밋 λ‹¨μœ„λŠ” μ•ž λ‹¨κ³„μ—μ„œΒ README.md에 μ •λ¦¬ν•œ κΈ°λŠ₯ λͺ©λ‘ λ‹¨μœ„λ‘œ μΆ”κ°€ν•œλ‹€.
  • μžμ„Έν•œ 과제 진행 방법은 ν”„λ¦¬μ½”μŠ€ 진행 κ°€μ΄λ“œ λ¬Έμ„œλ₯Ό μ°Έκ³ ν•œλ‹€.

κΈ°λŠ₯ μš”κ΅¬ 사항

ꡬ맀자의 할인 ν˜œνƒκ³Ό 재고 상황을 κ³ λ €ν•˜μ—¬ μ΅œμ’… 결제 κΈˆμ•‘μ„ κ³„μ‚°ν•˜κ³  μ•ˆλ‚΄ν•˜λŠ” 결제 μ‹œμŠ€ν…œμ„ κ΅¬ν˜„ν•œλ‹€.

  • μ‚¬μš©μžκ°€ μž…λ ₯ν•œ μƒν’ˆμ˜ 가격과 μˆ˜λŸ‰μ„ 기반으둜 μ΅œμ’… 결제 κΈˆμ•‘μ„ κ³„μ‚°ν•œλ‹€.
    • 총ꡬ맀앑은 μƒν’ˆλ³„ 가격과 μˆ˜λŸ‰μ„ κ³±ν•˜μ—¬ κ³„μ‚°ν•˜λ©°, ν”„λ‘œλͺ¨μ…˜ 및 멀버십 할인 정책을 λ°˜μ˜ν•˜μ—¬ μ΅œμ’… 결제 κΈˆμ•‘μ„ μ‚°μΆœν•œλ‹€.
  • ꡬ맀 λ‚΄μ—­κ³Ό μ‚°μΆœν•œ κΈˆμ•‘ 정보λ₯Ό 영수증으둜 좜λ ₯ν•œλ‹€.
  • 영수증 좜λ ₯ ν›„ μΆ”κ°€ ꡬ맀λ₯Ό 진행할지 λ˜λŠ” μ’…λ£Œν• μ§€λ₯Ό 선택할 수 μžˆλ‹€.
  • μ‚¬μš©μžκ°€ 잘λͺ»λœ 값을 μž…λ ₯ν•  경우 IllegalArgumentExceptionλ₯Ό λ°œμƒμ‹œν‚€κ³ , "[ERROR]"둜 μ‹œμž‘ν•˜λŠ” μ—λŸ¬ λ©”μ‹œμ§€λ₯Ό 좜λ ₯ ν›„ κ·Έ λΆ€λΆ„λΆ€ν„° μž…λ ₯을 λ‹€μ‹œ λ°›λŠ”λ‹€.
    • Exception이 μ•„λ‹ŒΒ IllegalArgumentException,Β IllegalStateExceptionΒ λ“±κ³Ό 같은 λͺ…ν™•ν•œ μœ ν˜•μ„ μ²˜λ¦¬ν•œλ‹€.

재고 관리

  • 각 μƒν’ˆμ˜ 재고 μˆ˜λŸ‰μ„ κ³ λ €ν•˜μ—¬ 결제 κ°€λŠ₯ μ—¬λΆ€λ₯Ό ν™•μΈν•œλ‹€.
  • 고객이 μƒν’ˆμ„ ꡬ맀할 λ•Œλ§ˆλ‹€, 결제된 μˆ˜λŸ‰λ§ŒνΌ ν•΄λ‹Ή μƒν’ˆμ˜ μž¬κ³ μ—μ„œ μ°¨κ°ν•˜μ—¬ μˆ˜λŸ‰μ„ κ΄€λ¦¬ν•œλ‹€.
  • 재고λ₯Ό μ°¨κ°ν•¨μœΌλ‘œμ¨ μ‹œμŠ€ν…œμ€ μ΅œμ‹  재고 μƒνƒœλ₯Ό μœ μ§€ν•˜λ©°, λ‹€μŒ 고객이 ꡬ맀할 λ•Œ μ •ν™•ν•œ 재고 정보λ₯Ό μ œκ³΅ν•œλ‹€.

ν”„λ‘œλͺ¨μ…˜ 할인

  • 였늘 λ‚ μ§œκ°€ ν”„λ‘œλͺ¨μ…˜ κΈ°κ°„ 내에 ν¬ν•¨λœ κ²½μš°μ—λ§Œ 할인을 μ μš©ν•œλ‹€.
  • ν”„λ‘œλͺ¨μ…˜μ€ N개 ꡬ맀 μ‹œ 1개 무료 증정(Buy N Get 1 Free)의 ν˜•νƒœλ‘œ μ§„ν–‰λœλ‹€.
  • 1+1 λ˜λŠ” 2+1 ν”„λ‘œλͺ¨μ…˜μ΄ 각각 μ§€μ •λœ μƒν’ˆμ— 적용되며, 동일 μƒν’ˆμ— μ—¬λŸ¬ ν”„λ‘œλͺ¨μ…˜μ΄ μ μš©λ˜μ§€ μ•ŠλŠ”λ‹€.
  • ν”„λ‘œλͺ¨μ…˜ ν˜œνƒμ€ ν”„λ‘œλͺ¨μ…˜ 재고 λ‚΄μ—μ„œλ§Œ μ μš©ν•  수 μžˆλ‹€.
  • ν”„λ‘œλͺ¨μ…˜ κΈ°κ°„ 쀑이라면 ν”„λ‘œλͺ¨μ…˜ 재고λ₯Ό μš°μ„ μ μœΌλ‘œ μ°¨κ°ν•˜λ©°, ν”„λ‘œλͺ¨μ…˜ μž¬κ³ κ°€ λΆ€μ‘±ν•  κ²½μš°μ—λŠ” 일반 재고λ₯Ό μ‚¬μš©ν•œλ‹€.
  • ν”„λ‘œλͺ¨μ…˜ 적용이 κ°€λŠ₯ν•œ μƒν’ˆμ— λŒ€ν•΄ 고객이 ν•΄λ‹Ή μˆ˜λŸ‰λ³΄λ‹€ 적게 κ°€μ Έμ˜¨ 경우, ν•„μš”ν•œ μˆ˜λŸ‰μ„ μΆ”κ°€λ‘œ κ°€μ Έμ˜€λ©΄ ν˜œνƒμ„ 받을 수 μžˆμŒμ„ μ•ˆλ‚΄ν•œλ‹€.
  • ν”„λ‘œλͺ¨μ…˜ μž¬κ³ κ°€ λΆ€μ‘±ν•˜μ—¬ 일뢀 μˆ˜λŸ‰μ„ ν”„λ‘œλͺ¨μ…˜ ν˜œνƒ 없이 κ²°μ œν•΄μ•Ό ν•˜λŠ” 경우, 일뢀 μˆ˜λŸ‰μ— λŒ€ν•΄ μ •κ°€λ‘œ κ²°μ œν•˜κ²Œ 됨을 μ•ˆλ‚΄ν•œλ‹€.

멀버십 할인

  • 멀버십 νšŒμ›μ€ ν”„λ‘œλͺ¨μ…˜ 미적용 κΈˆμ•‘μ˜ 30%λ₯Ό ν• μΈλ°›λŠ”λ‹€.
  • ν”„λ‘œλͺ¨μ…˜ 적용 ν›„ 남은 κΈˆμ•‘μ— λŒ€ν•΄ 멀버십 할인을 μ μš©ν•œλ‹€.
  • 멀버십 ν• μΈμ˜ μ΅œλŒ€ ν•œλ„λŠ” 8,000원이닀.

영수증 좜λ ₯

  • μ˜μˆ˜μ¦μ€ 고객의 ꡬ맀 λ‚΄μ—­κ³Ό 할인을 μš”μ•½ν•˜μ—¬ 좜λ ₯ν•œλ‹€.
  • 영수증 ν•­λͺ©μ€ μ•„λž˜μ™€ κ°™λ‹€.
    • ꡬ맀 μƒν’ˆ λ‚΄μ—­: κ΅¬λ§€ν•œ μƒν’ˆλͺ…, μˆ˜λŸ‰, 가격
    • 증정 μƒν’ˆ λ‚΄μ—­: ν”„λ‘œλͺ¨μ…˜μ— 따라 무료둜 제곡된 증정 μƒν’ˆμ˜ λͺ©λ‘
    • κΈˆμ•‘ 정보
      • 총ꡬ맀앑: κ΅¬λ§€ν•œ μƒν’ˆμ˜ 총 μˆ˜λŸ‰κ³Ό 총 κΈˆμ•‘
      • 행사할인: ν”„λ‘œλͺ¨μ…˜μ— μ˜ν•΄ ν• μΈλœ κΈˆμ•‘
      • 멀버십할인: 멀버십에 μ˜ν•΄ μΆ”κ°€λ‘œ ν• μΈλœ κΈˆμ•‘
      • λ‚΄μ‹€λˆ: μ΅œμ’… 결제 κΈˆμ•‘
  • 영수증의 ꡬ성 μš”μ†Œλ₯Ό 보기 μ’‹κ²Œ μ •λ ¬ν•˜μ—¬ 고객이 μ‰½κ²Œ κΈˆμ•‘κ³Ό μˆ˜λŸ‰μ„ 확인할 수 있게 ν•œλ‹€.

μž…μΆœλ ₯ μš”κ΅¬ 사항

μž…λ ₯

1단계

  • κ΅¬ν˜„μ— ν•„μš”ν•œ μƒν’ˆ λͺ©λ‘κ³Ό 행사 λͺ©λ‘μ„ 파일 μž…μΆœλ ₯을 톡해 λΆˆλŸ¬μ˜¨λ‹€.
    • src/main/resources/products.mdκ³ΌΒ src/main/resources/promotions.mdΒ νŒŒμΌμ„ μ΄μš©ν•œλ‹€.
    • 두 파일 λͺ¨λ‘ λ‚΄μš©μ˜ ν˜•μ‹μ„ μœ μ§€ν•œλ‹€λ©΄ 값은 μˆ˜μ •ν•  수 μžˆλ‹€.
  • ꡬ맀할 μƒν’ˆκ³Ό μˆ˜λŸ‰μ„ μž…λ ₯ λ°›λŠ”λ‹€. μƒν’ˆλͺ…, μˆ˜λŸ‰μ€ ν•˜μ΄ν”ˆ(-)으둜, κ°œλ³„ μƒν’ˆμ€ λŒ€κ΄„ν˜Έ([])둜 λ¬Άμ–΄ μ‰Όν‘œ(,)둜 κ΅¬λΆ„ν•œλ‹€.
[콜라-10],[사이닀-3]

2단계

  • ν”„λ‘œλͺ¨μ…˜ 적용이 κ°€λŠ₯ν•œ μƒν’ˆμ— λŒ€ν•΄ 고객이 ν•΄λ‹Ή μˆ˜λŸ‰λ³΄λ‹€ 적게 κ°€μ Έμ˜¨ 경우, κ·Έ μˆ˜λŸ‰λ§ŒνΌ μΆ”κ°€ μ—¬λΆ€λ₯Ό μž…λ ₯λ°›λŠ”λ‹€.
    • Y: 증정 받을 수 μžˆλŠ” μƒν’ˆμ„ μΆ”κ°€ν•œλ‹€.
    • N: 증정 받을 수 μžˆλŠ” μƒν’ˆμ„ μΆ”κ°€ν•˜μ§€ μ•ŠλŠ”λ‹€.
Y
  • ν”„λ‘œλͺ¨μ…˜ μž¬κ³ κ°€ λΆ€μ‘±ν•˜μ—¬ 일뢀 μˆ˜λŸ‰μ„ ν”„λ‘œλͺ¨μ…˜ ν˜œνƒ 없이 κ²°μ œν•΄μ•Ό ν•˜λŠ” 경우, 일뢀 μˆ˜λŸ‰μ— λŒ€ν•΄ μ •κ°€λ‘œ κ²°μ œν• μ§€ μ—¬λΆ€λ₯Ό μž…λ ₯λ°›λŠ”λ‹€.
    • Y: 일뢀 μˆ˜λŸ‰μ— λŒ€ν•΄ μ •κ°€λ‘œ κ²°μ œν•œλ‹€.
    • N: μ •κ°€λ‘œ κ²°μ œν•΄μ•Όν•˜λŠ” μˆ˜λŸ‰λ§ŒνΌ μ œμ™Έν•œ ν›„ 결제λ₯Ό μ§„ν–‰ν•œλ‹€.
Y
  • 멀버십 할인 적용 μ—¬λΆ€λ₯Ό μž…λ ₯ λ°›λŠ”λ‹€.
    • Y: 멀버십 할인을 μ μš©ν•œλ‹€.
    • N: 멀버십 할인을 μ μš©ν•˜μ§€ μ•ŠλŠ”λ‹€.
Y
  • μΆ”κ°€ ꡬ맀 μ—¬λΆ€λ₯Ό μž…λ ₯ λ°›λŠ”λ‹€.
    • Y: μž¬κ³ κ°€ μ—…λ°μ΄νŠΈλœ μƒν’ˆ λͺ©λ‘μ„ 확인 ν›„ μΆ”κ°€λ‘œ ꡬ맀λ₯Ό μ§„ν–‰ν•œλ‹€.
    • N: ꡬ맀λ₯Ό μ’…λ£Œν•œλ‹€.
Y

좜λ ₯

1단계

  • ν™˜μ˜ 인사와 ν•¨κ»˜ μƒν’ˆλͺ…, 가격, ν”„λ‘œλͺ¨μ…˜ 이름, 재고λ₯Ό μ•ˆλ‚΄ν•œλ‹€. λ§Œμ•½ μž¬κ³ κ°€ 0개라면 재고 μ—†μŒμ„ 좜λ ₯ν•œλ‹€.
μ•ˆλ…•ν•˜μ„Έμš”. WνŽΈμ˜μ μž…λ‹ˆλ‹€.
ν˜„μž¬ λ³΄μœ ν•˜κ³  μžˆλŠ” μƒν’ˆμž…λ‹ˆλ‹€.

- 콜라 1,000원 10개 탄산2+1
- 콜라 1,000원 10개
- 사이닀 1,000원 8개 탄산2+1
- 사이닀 1,000원 7개
- μ˜€λ Œμ§€μ£ΌμŠ€ 1,800원 9개 MDμΆ”μ²œμƒν’ˆ
- μ˜€λ Œμ§€μ£ΌμŠ€ 1,800원 재고 μ—†μŒ
- νƒ„μ‚°μˆ˜ 1,200원 5개 탄산2+1
- νƒ„μ‚°μˆ˜ 1,200원 재고 μ—†μŒ
- λ¬Ό 500원 10개
- λΉ„νƒ€λ―Όμ›Œν„° 1,500원 6개
- 감자칩 1,500원 5개 λ°˜μ§ν• μΈ
- 감자칩 1,500원 5개
- μ΄ˆμ½”λ°” 1,200원 5개 MDμΆ”μ²œμƒν’ˆ
- μ΄ˆμ½”λ°” 1,200원 5개
- μ—λ„ˆμ§€λ°” 2,000원 5개
- μ •μ‹λ„μ‹œλ½ 6,400원 8개
- 컡라면 1,700원 1개 MDμΆ”μ²œμƒν’ˆ
- 컡라면 1,700원 10개

κ΅¬λ§€ν•˜μ‹€ μƒν’ˆλͺ…κ³Ό μˆ˜λŸ‰μ„ μž…λ ₯ν•΄ μ£Όμ„Έμš”. (예: [사이닀-2],[감자칩-1])

2단계

  • ν”„λ‘œλͺ¨μ…˜ 적용이 κ°€λŠ₯ν•œ μƒν’ˆμ— λŒ€ν•΄ 고객이 ν•΄λ‹Ή μˆ˜λŸ‰λ§ŒνΌ κ°€μ Έμ˜€μ§€ μ•Šμ•˜μ„ 경우, ν˜œνƒμ— λŒ€ν•œ μ•ˆλ‚΄ λ©”μ‹œμ§€λ₯Ό 좜λ ₯ν•œλ‹€.
ν˜„μž¬ {μƒν’ˆλͺ…}은(λŠ”) 1개λ₯Ό 무료둜 더 받을 수 μžˆμŠ΅λ‹ˆλ‹€. μΆ”κ°€ν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ? (Y/N)

  • ν”„λ‘œλͺ¨μ…˜ μž¬κ³ κ°€ λΆ€μ‘±ν•˜μ—¬ 일뢀 μˆ˜λŸ‰μ„ ν”„λ‘œλͺ¨μ…˜ ν˜œνƒ 없이 κ²°μ œν•΄μ•Ό ν•˜λŠ” 경우, 일뢀 μˆ˜λŸ‰μ— λŒ€ν•΄ μ •κ°€λ‘œ κ²°μ œν• μ§€ 여뢀에 λŒ€ν•œ μ•ˆλ‚΄ λ©”μ‹œμ§€λ₯Ό 좜λ ₯ν•œλ‹€.
ν˜„μž¬ {μƒν’ˆλͺ…} {μˆ˜λŸ‰}κ°œλŠ” ν”„λ‘œλͺ¨μ…˜ 할인이 μ μš©λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. κ·Έλž˜λ„ κ΅¬λ§€ν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ? (Y/N)

  • 멀버십 할인 적용 μ—¬λΆ€λ₯Ό ν™•μΈν•˜κΈ° μœ„ν•΄ μ•ˆλ‚΄ 문ꡬλ₯Ό 좜λ ₯ν•œλ‹€.
멀버십 할인을 λ°›μœΌμ‹œκ² μŠ΅λ‹ˆκΉŒ? (Y/N)
  • ꡬ맀 μƒν’ˆ λ‚΄μ—­, 증정 μƒν’ˆ λ‚΄μ—­, κΈˆμ•‘ 정보λ₯Ό 좜λ ₯ν•œλ‹€.
===========W 편의점=============
μƒν’ˆλͺ…		μˆ˜λŸ‰	κΈˆμ•‘
콜라		3 	3,000
μ—λ„ˆμ§€λ°” 		5 	10,000
===========증	μ •=============
콜라		1
==============================
총ꡬ맀앑		8	13,000
행사할인			-1,000
멀버십할인			-3,000
λ‚΄μ‹€λˆ			 9,000

  • μΆ”κ°€ ꡬ맀 μ—¬λΆ€λ₯Ό ν™•μΈν•˜κΈ° μœ„ν•΄ μ•ˆλ‚΄ 문ꡬλ₯Ό 좜λ ₯ν•œλ‹€.
κ°μ‚¬ν•©λ‹ˆλ‹€. κ΅¬λ§€ν•˜κ³  싢은 λ‹€λ₯Έ μƒν’ˆμ΄ μžˆλ‚˜μš”? (Y/N)
  • μ‚¬μš©μžκ°€ 잘λͺ»λœ 값을 μž…λ ₯ν–ˆμ„ λ•Œ, "[ERROR]"둜 μ‹œμž‘ν•˜λŠ” 였λ₯˜ λ©”μ‹œμ§€μ™€ ν•¨κ»˜ 상황에 λ§žλŠ” μ•ˆλ‚΄λ₯Ό 좜λ ₯ν•œλ‹€.
    • ꡬ맀할 μƒν’ˆκ³Ό μˆ˜λŸ‰ ν˜•μ‹μ΄ μ˜¬λ°”λ₯΄μ§€ μ•Šμ€ 경우:Β [ERROR] μ˜¬λ°”λ₯΄μ§€ μ•Šμ€ ν˜•μ‹μœΌλ‘œ μž…λ ₯ν–ˆμŠ΅λ‹ˆλ‹€. λ‹€μ‹œ μž…λ ₯ν•΄ μ£Όμ„Έμš”.
    • μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” μƒν’ˆμ„ μž…λ ₯ν•œ 경우:Β [ERROR] μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” μƒν’ˆμž…λ‹ˆλ‹€. λ‹€μ‹œ μž…λ ₯ν•΄ μ£Όμ„Έμš”.
    • ꡬ맀 μˆ˜λŸ‰μ΄ 재고 μˆ˜λŸ‰μ„ μ΄ˆκ³Όν•œ 경우:Β [ERROR] 재고 μˆ˜λŸ‰μ„ μ΄ˆκ³Όν•˜μ—¬ ꡬ맀할 수 μ—†μŠ΅λ‹ˆλ‹€. λ‹€μ‹œ μž…λ ₯ν•΄ μ£Όμ„Έμš”.
    • 기타 잘λͺ»λœ μž…λ ₯의 경우:Β [ERROR] 잘λͺ»λœ μž…λ ₯μž…λ‹ˆλ‹€. λ‹€μ‹œ μž…λ ₯ν•΄ μ£Όμ„Έμš”.

μ‹€ν–‰ κ²°κ³Ό μ˜ˆμ‹œ

μ•ˆλ…•ν•˜μ„Έμš”. WνŽΈμ˜μ μž…λ‹ˆλ‹€.
ν˜„μž¬ λ³΄μœ ν•˜κ³  μžˆλŠ” μƒν’ˆμž…λ‹ˆλ‹€.

- 콜라 1,000원 10개 탄산2+1
- 콜라 1,000원 10개
- 사이닀 1,000원 8개 탄산2+1
- 사이닀 1,000원 7개
- μ˜€λ Œμ§€μ£ΌμŠ€ 1,800원 9개 MDμΆ”μ²œμƒν’ˆ
- μ˜€λ Œμ§€μ£ΌμŠ€ 1,800원 재고 μ—†μŒ
- νƒ„μ‚°μˆ˜ 1,200원 5개 탄산2+1
- νƒ„μ‚°μˆ˜ 1,200원 재고 μ—†μŒ
- λ¬Ό 500원 10개
- λΉ„νƒ€λ―Όμ›Œν„° 1,500원 6개
- 감자칩 1,500원 5개 λ°˜μ§ν• μΈ
- 감자칩 1,500원 5개
- μ΄ˆμ½”λ°” 1,200원 5개 MDμΆ”μ²œμƒν’ˆ
- μ΄ˆμ½”λ°” 1,200원 5개
- μ—λ„ˆμ§€λ°” 2,000원 5개
- μ •μ‹λ„μ‹œλ½ 6,400원 8개
- 컡라면 1,700원 1개 MDμΆ”μ²œμƒν’ˆ
- 컡라면 1,700원 10개

κ΅¬λ§€ν•˜μ‹€ μƒν’ˆλͺ…κ³Ό μˆ˜λŸ‰μ„ μž…λ ₯ν•΄ μ£Όμ„Έμš”. (예: [사이닀-2],[감자칩-1])
[콜라-3],[μ—λ„ˆμ§€λ°”-5]

멀버십 할인을 λ°›μœΌμ‹œκ² μŠ΅λ‹ˆκΉŒ? (Y/N)
Y

===========W 편의점=============
μƒν’ˆλͺ…		μˆ˜λŸ‰	κΈˆμ•‘
콜라		3 	3,000
μ—λ„ˆμ§€λ°” 		5 	10,000
===========증	μ •=============
콜라		1
==============================
총ꡬ맀앑		8	13,000
행사할인			-1,000
멀버십할인			-3,000
λ‚΄μ‹€λˆ			 9,000

κ°μ‚¬ν•©λ‹ˆλ‹€. κ΅¬λ§€ν•˜κ³  싢은 λ‹€λ₯Έ μƒν’ˆμ΄ μžˆλ‚˜μš”? (Y/N)
Y

μ•ˆλ…•ν•˜μ„Έμš”. WνŽΈμ˜μ μž…λ‹ˆλ‹€.
ν˜„μž¬ λ³΄μœ ν•˜κ³  μžˆλŠ” μƒν’ˆμž…λ‹ˆλ‹€.

- 콜라 1,000원 7개 탄산2+1
- 콜라 1,000원 10개
- 사이닀 1,000원 8개 탄산2+1
- 사이닀 1,000원 7개
- μ˜€λ Œμ§€μ£ΌμŠ€ 1,800원 9개 MDμΆ”μ²œμƒν’ˆ
- μ˜€λ Œμ§€μ£ΌμŠ€ 1,800원 재고 μ—†μŒ
- νƒ„μ‚°μˆ˜ 1,200원 5개 탄산2+1
- νƒ„μ‚°μˆ˜ 1,200원 재고 μ—†μŒ
- λ¬Ό 500원 10개
- λΉ„νƒ€λ―Όμ›Œν„° 1,500원 6개
- 감자칩 1,500원 5개 λ°˜μ§ν• μΈ
- 감자칩 1,500원 5개
- μ΄ˆμ½”λ°” 1,200원 5개 MDμΆ”μ²œμƒν’ˆ
- μ΄ˆμ½”λ°” 1,200원 5개
- μ—λ„ˆμ§€λ°” 2,000원 재고 μ—†μŒ
- μ •μ‹λ„μ‹œλ½ 6,400원 8개
- 컡라면 1,700원 1개 MDμΆ”μ²œμƒν’ˆ
- 컡라면 1,700원 10개

κ΅¬λ§€ν•˜μ‹€ μƒν’ˆλͺ…κ³Ό μˆ˜λŸ‰μ„ μž…λ ₯ν•΄ μ£Όμ„Έμš”. (예: [사이닀-2],[감자칩-1])
[콜라-10]

ν˜„μž¬ 콜라 4κ°œλŠ” ν”„λ‘œλͺ¨μ…˜ 할인이 μ μš©λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. κ·Έλž˜λ„ κ΅¬λ§€ν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ? (Y/N)
Y

멀버십 할인을 λ°›μœΌμ‹œκ² μŠ΅λ‹ˆκΉŒ? (Y/N)
N

===========W 편의점=============
μƒν’ˆλͺ…		μˆ˜λŸ‰	κΈˆμ•‘
콜라		10 	10,000
===========증	μ •=============
콜라		2
==============================
총ꡬ맀앑		10	10,000
행사할인			-2,000
멀버십할인			-0
λ‚΄μ‹€λˆ			 8,000

κ°μ‚¬ν•©λ‹ˆλ‹€. κ΅¬λ§€ν•˜κ³  싢은 λ‹€λ₯Έ μƒν’ˆμ΄ μžˆλ‚˜μš”? (Y/N)
Y

μ•ˆλ…•ν•˜μ„Έμš”. WνŽΈμ˜μ μž…λ‹ˆλ‹€.
ν˜„μž¬ λ³΄μœ ν•˜κ³  μžˆλŠ” μƒν’ˆμž…λ‹ˆλ‹€.

- 콜라 1,000원 재고 μ—†μŒ 탄산2+1
- 콜라 1,000원 7개
- 사이닀 1,000원 8개 탄산2+1
- 사이닀 1,000원 7개
- μ˜€λ Œμ§€μ£ΌμŠ€ 1,800원 9개 MDμΆ”μ²œμƒν’ˆ
- μ˜€λ Œμ§€μ£ΌμŠ€ 1,800원 재고 μ—†μŒ
- νƒ„μ‚°μˆ˜ 1,200원 5개 탄산2+1
- νƒ„μ‚°μˆ˜ 1,200원 재고 μ—†μŒ
- λ¬Ό 500원 10개
- λΉ„νƒ€λ―Όμ›Œν„° 1,500원 6개
- 감자칩 1,500원 5개 λ°˜μ§ν• μΈ
- 감자칩 1,500원 5개
- μ΄ˆμ½”λ°” 1,200원 5개 MDμΆ”μ²œμƒν’ˆ
- μ΄ˆμ½”λ°” 1,200원 5개
- μ—λ„ˆμ§€λ°” 2,000원 재고 μ—†μŒ
- μ •μ‹λ„μ‹œλ½ 6,400원 8개
- 컡라면 1,700원 1개 MDμΆ”μ²œμƒν’ˆ
- 컡라면 1,700원 10개

κ΅¬λ§€ν•˜μ‹€ μƒν’ˆλͺ…κ³Ό μˆ˜λŸ‰μ„ μž…λ ₯ν•΄ μ£Όμ„Έμš”. (예: [사이닀-2],[감자칩-1])
[μ˜€λ Œμ§€μ£ΌμŠ€-1]

ν˜„μž¬ μ˜€λ Œμ§€μ£ΌμŠ€μ€(λŠ”) 1개λ₯Ό 무료둜 더 받을 수 μžˆμŠ΅λ‹ˆλ‹€. μΆ”κ°€ν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ? (Y/N)
Y

멀버십 할인을 λ°›μœΌμ‹œκ² μŠ΅λ‹ˆκΉŒ? (Y/N)
Y

===========W 편의점=============
μƒν’ˆλͺ…		μˆ˜λŸ‰	κΈˆμ•‘
μ˜€λ Œμ§€μ£ΌμŠ€		2 	3,600
===========증	μ •=============
μ˜€λ Œμ§€μ£ΌμŠ€		1
==============================
총ꡬ맀앑		2	3,600
행사할인			-1,800
멀버십할인			-0
λ‚΄μ‹€λˆ			 1,800

κ°μ‚¬ν•©λ‹ˆλ‹€. κ΅¬λ§€ν•˜κ³  싢은 λ‹€λ₯Έ μƒν’ˆμ΄ μžˆλ‚˜μš”? (Y/N)
N

ν”„λ‘œκ·Έλž˜λ° μš”κ΅¬ 사항 1

  • Kotlin 1.9.24μ—μ„œ μ‹€ν–‰ κ°€λŠ₯ν•΄μ•Ό ν•œλ‹€.
  • Java μ½”λ“œκ°€ μ•„λ‹Œ Kotlin μ½”λ“œλ‘œλ§Œ κ΅¬ν˜„ν•΄μ•Ό ν•œλ‹€.
  • ν”„λ‘œκ·Έλž¨ μ‹€ν–‰μ˜ μ‹œμž‘μ μ€Β Application의 main()이닀.
  • build.gradle.ktsΒ νŒŒμΌμ€ λ³€κ²½ν•  수 μ—†μœΌλ©°, 제곡된 라이브러리 μ΄μ™Έμ˜ μ™ΈλΆ€ λΌμ΄λΈŒλŸ¬λ¦¬λŠ” μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€.
  • ν”„λ‘œκ·Έλž¨ μ’…λ£Œ μ‹œΒ System.exit()Β λ˜λŠ”Β exitProcess()λ₯Ό ν˜ΈμΆœν•˜μ§€ μ•ŠλŠ”λ‹€.
  • ν”„λ‘œκ·Έλž˜λ° μš”κ΅¬ μ‚¬ν•­μ—μ„œ 달리 λͺ…μ‹œν•˜μ§€ μ•ŠλŠ” ν•œ 파일, νŒ¨ν‚€μ§€ λ“±μ˜ 이름을 λ°”κΎΈκ±°λ‚˜ μ΄λ™ν•˜μ§€ μ•ŠλŠ”λ‹€.
  • μ½”ν‹€λ¦° μ½”λ“œ μ»¨λ²€μ…˜μ„ μ§€ν‚€λ©΄μ„œ ν”„λ‘œκ·Έλž˜λ°ν•œλ‹€.
    • 기본적으둜 Kotlin Style Guideλ₯Ό μ›μΉ™μœΌλ‘œ ν•œλ‹€.

ν”„λ‘œκ·Έλž˜λ° μš”κ΅¬ 사항 2

  • indent(인덴트, λ“€μ—¬μ“°κΈ°) depthλ₯Ό 3이 λ„˜μ§€ μ•Šλ„λ‘ κ΅¬ν˜„ν•œλ‹€. 2κΉŒμ§€λ§Œ ν—ˆμš©ν•œλ‹€.
    • 예λ₯Ό λ“€μ–΄ whileλ¬Έ μ•ˆμ— if문이 있으면 λ“€μ—¬μ“°κΈ°λŠ” 2이닀.
    • 힌트: indent(인덴트, λ“€μ—¬μ“°κΈ°) depthλ₯Ό μ€„μ΄λŠ” 쒋은 방법은 ν•¨μˆ˜(λ˜λŠ” λ©”μ„œλ“œ)λ₯Ό λΆ„λ¦¬ν•˜λ©΄ λœλ‹€.
  • ν•¨μˆ˜(λ˜λŠ” λ©”μ„œλ“œ)κ°€ ν•œ 가지 일만 ν•˜λ„λ‘ μ΅œλŒ€ν•œ μž‘κ²Œ λ§Œλ“€μ–΄λΌ.
  • JUnit 5와 AssertJλ₯Ό μ΄μš©ν•˜μ—¬ μ •λ¦¬ν•œ κΈ°λŠ₯ λͺ©λ‘μ΄ μ •μƒμ μœΌλ‘œ μž‘λ™ν•˜λŠ”μ§€ ν…ŒμŠ€νŠΈ μ½”λ“œλ‘œ ν™•μΈν•œλ‹€.

ν”„λ‘œκ·Έλž˜λ° μš”κ΅¬ 사항 3

  • elseλ₯Ό μ§€μ–‘ν•œλ‹€.
    • λ•Œλ‘œλŠ” if/else, when문을 μ‚¬μš©ν•˜λŠ” 것이 더 깔끔해 보일 수 μžˆλ‹€. μ–΄λŠ κ²½μš°μ— μ“°λŠ” 것이 μ μ ˆν• μ§€ 슀슀둜 κ³ λ―Όν•΄ λ³Έλ‹€.
    • 힌트: if μ‘°κ±΄μ ˆμ—μ„œ 값을 returnν•˜λŠ” λ°©μ‹μœΌλ‘œ κ΅¬ν˜„ν•˜λ©΄ elseλ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šμ•„λ„ λœλ‹€.
  • Enum 클래슀λ₯Ό μ μš©ν•˜μ—¬ ν”„λ‘œκ·Έλž¨μ„ κ΅¬ν˜„ν•œλ‹€.
  • κ΅¬ν˜„ν•œ κΈ°λŠ₯에 λŒ€ν•œ λ‹¨μœ„ ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•œλ‹€. 단, UI(System.out, System.in, Scanner) λ‘œμ§μ€ μ œμ™Έν•œλ‹€.

ν”„λ‘œκ·Έλž˜λ° μš”κ΅¬ 사항 4

  • ν•¨μˆ˜(λ˜λŠ” λ©”μ„œλ“œ)의 길이가 10라인을 λ„˜μ–΄κ°€μ§€ μ•Šλ„λ‘ κ΅¬ν˜„ν•œλ‹€.

    • ν•¨μˆ˜(λ˜λŠ” λ©”μ„œλ“œ)κ°€ ν•œ 가지 일만 잘 ν•˜λ„λ‘ κ΅¬ν˜„ν•œλ‹€.
  • μž…μΆœλ ₯을 λ‹΄λ‹Ήν•˜λŠ” 클래슀λ₯Ό λ³„λ„λ‘œ κ΅¬ν˜„ν•œλ‹€.

    • μ•„λž˜Β InputView,Β OutputView 클래슀λ₯Ό μ°Έκ³ ν•˜μ—¬ μž…μΆœλ ₯ 클래슀λ₯Ό κ΅¬ν˜„ν•œλ‹€.
    • 클래슀 이름, λ©”μ†Œλ“œ λ°˜ν™˜ μœ ν˜•, μ‹œκ·Έλ‹ˆμ²˜ 등은 자유둭게 μˆ˜μ •ν•  수 μžˆλ‹€.
    class InputView {
        fun readItem(): String {
            println("κ΅¬λ§€ν•˜μ‹€ μƒν’ˆλͺ…κ³Ό μˆ˜λŸ‰μ„ μž…λ ₯ν•΄ μ£Όμ„Έμš”. (예: [사이닀-2],[감자칩-1])")
            val input = Console.readLine()
            // ...
        }
        // ...
    }
    
    class OutputView {
        fun printProducts() {
            println("- 콜라 1,000원 10개 탄산2+1")
            // ...
        }
        // ...
    }
    

라이브러리

  • camp.nextstep.edu.missionutilsμ—μ„œ μ œκ³΅ν•˜λŠ”Β DateTimes 및 ConsoleΒ APIλ₯Ό μ‚¬μš©ν•˜μ—¬ κ΅¬ν˜„ν•΄μ•Ό ν•œλ‹€.
    • ν˜„μž¬ λ‚ μ§œμ™€ μ‹œκ°„μ„ κ°€μ Έμ˜€λ €λ©΄Β camp.nextstep.edu.missionutils.DateTimes의 now()λ₯Ό ν™œμš©ν•œλ‹€.
    • μ‚¬μš©μžκ°€ μž…λ ₯ν•˜λŠ” 값은 camp.nextstep.edu.missionutils.Console의 readLine()을 ν™œμš©ν•œλ‹€.