본문 바로가기
TIL

[231019] Java 개인과제

by 진진리 2023. 10. 19.
728x90
  • 알고리즘 문제 풀기
while(j<6&&lottos[i]>win_nums[j]) j++;
if(j<6&&lottos[i]==win_nums[j]){
    correct++;
    j++;
}
if(j==6) break;

문제를 풀던 도중 OutOfBounds 에러가 났다.

위 코드와 반대로 lottos[i]>win_nums[j] && j<6 으로 썼기 때문이었다.

검사할 때 조건에서 앞에 있는 조건을 먼저 검사하기 때문에 이 경우 j<6을 앞에 써줘야 한다.


  • Java 개인과제

Java 클래스 설계 시 필수 요구사항!

  • 메뉴 클래스는 이름, 설명 필드를 가지는 클래스로 만들어주세요.
  • 상품 클래스는 이름, 가격, 설명 필드를 가지는 클래스로 만들어주세요.
  • 상품 클래스의 이름, 설명 필드는 메뉴 클래스를 상속받아 사용하는 구조로 개발해주세요.
  • 주문 클래스도 만들어서 상품 객체를 담을 수 있도록 해주세요.

과제의 필수 요구사항에 맞춰서 일단 추상 클래스 Menu를 만들어 필드로 이름, 가격, 설명을 가지도록 했고, 세 값을 인자로 넣으면 저장하는 생성자를 만들었다.

Menu를 상속받는 여러 메뉴 클래스들을 만들었고 음료 품목의 클래스는 옵션 필드를 따로 가진다.

 

주문 클래스는 처음부터 어떻게 만들어야 할지 잘 모르겠다...

일단 Order클래스는 Menu를 상속받은 상품 클래스들을 포함하고 장바구니의 상품들, 팔린 상품들을 ArrayList로 관리한다.

그 외에 장바구니에 담긴 상품들의 총 가격, 총 개수, 판매한 상품들의 총 가격, 총 개수를 설정, 인스턴스 필드인 상품 개수를 가지도록 했다.

Order 클래스에는 장바구니 목록인 orders와 판매한 총 상품들의 목록인 total_orders의 사이즈를 구하고, menu를 읽고, 더하는 메소드를 가진다. 구입을 완료하면 orders의 목록을 total_orders에 추가하는 메소드와 장바구니를 비우는 메소드, 각 클래스 필드들의 getter, setter 메소드 등 있다.

 

Main 클래스에서는 사용자가 첫 화면에서 무엇을 선택하느냐에 따라 다른 화면을 불러온다.

이때 화면을 보여주는 Screen 클래스를 만들어 종류에 맞게 6개의 메소드를 구현하였다.

 

Screen의 main() 메소드는 메인 화면을 보여주고 사용자가 선택한 channel을 반환한다. 또한 Order 클래스의 장바구니내 상품 개수가 0인 경우 장바구니 상품 배열인 orders를 clear한다.

owner() 메소드는 숨겨진 0번을 누르면 보이는 화면으로 판매된 상품들의 총 가격합과 상품 내역을 보여준다.

sale(int channel) 메소드는 channel을 통해 음료, 음식, 상품 중 어떤 카테고리를 선택했는지 나타내고 각 카테고리에 맞게 상품 목록을 출력한다.

putin(int item) 메소드는 item을 통해 선택한 상품을 장바구니에 추가한다. 이때 장바구니의 상품들의 목록을 orders에 저장하고 이미 장바구니에 있는 상품일 경우 개수만 늘린다.

order(int wait) 메소드는 wait이라는 대기인원수를 입력받으면 +1해서 반환하며 장바구니에 상품이 들어가 있는 경우 목록을 출력하고 주문할 거신지 확인한다. 주문을 완료하면 대기번호를 출력하고 총 판매한 상품 목록(total_orders)에 장바구니 상품 목록(orders)을 Add한다.

set()메소드는 SetOrder를 호출하여 장바구니를 비운다.

 

- 구현한 코드

https://github.com/dlwls423/myjavaproject/tree/main/src/Assignment1

 

- 오늘의 고민:

메뉴 클래스를 상속받는 각 상품 클래스들을 각각 만드는게 맞는 건지 잘 모르겠다.

Order 클래스를 어떻게 구현해야 하는지 아직 잘 모르겠다. 포함이라는 개념을 구현하는 것이 어렵다.

실수 입력 등으로 인해 발생하는 오류들을 예외처리를 해야하는 건지 잘 모르겠다.

상속이라는 개념이 말 그대로 상속이 아닌 확장이라는 튜터님의 설명을 들었다. 궁금한 건 클래스들의 공통된 행위를 상위 클래스의 메소드를 사용할 수 있어서 편리한데, 여러 상품들을 메뉴 클래스의 배열로 담아 사용하다가 상품 클래스 내부의 메소드를 중간에 사용하고 싶을 때는 어떻게 해야할지 모르겠다.

 

- 내일 할 것:

일단 옵션 주문 받기 기능을 구현해보기

메뉴 클래스를 상속받는 상품 클래스를 하나만 만들어서 상품 객체를 생성만 이용하는 방향으로 코드 수정하기

예외 처리하기


  • github 정리 - 인텔리제이와 백준, 프로그래머스를 github와 연동했다.
  • 알게된 것: 배열 데이터 객체는 heap에 저장되고, 배열 데이터를 참조하는 변수가 static이면 Data 영역, 아니라면 stack에 저장된다.