본문 바로가기
TIL

[231020] 개인 과제 마무리, OOP 강의

by 진진리 2023. 10. 20.
728x90
  • 알고리즘 문제 풀기

어제 시간초과가 났던 문제를 해결해봤다.

https://jinjinjincode.tistory.com/142

 

[프로그래머스] 숫자 짝꿍

시간 초과 import java.util.regex.Pattern; import java.util.Arrays; class Solution { public String solution(String X, String Y) { String answer = ""; String reg = "[0]+"; for(int i=0;i

jinjinjincode.tistory.com


  • 개인 과제 마무리

어제 팀원들에게 코드 리뷰를 받고, 팀원분의 코드를 한번 참고해서 코드를 수정했다.

우선 복잡했던 여러 메뉴들의 클래스를 다 삭제하고 클래스들을 더 명확하게 바꾸었다.

 

Menu 클래스: 이름, 설명

-> Menu를 상속받는 Product 클래스: 가격, 음료유무

Order 클래스: Product. 개수, 사이즈, 최종가격(사이즈가격 추가)

각 클래스는 private 변수에 대한 getter와 setter를 가진다.

 

Screen 클래스:

각 상품들에 맞게 Product 변수를 생성한다.

상품들을 담는 ArrayList drinks, foods, goods를 만든다.

상품들을 모두 담는 2차원 ArrayList menus를 만든다.

장바구니의 주문을 담는 ArrayList bucket을 만든다.

모든 주문 내역을 담는 ArrayList total_orders를 만든다.

Order클래스의 사이즈에 맞는 사이즈명을 담는 String 배열 sizeName을 만든다.

그 외 int 필드 total_sale(총 판매 가격), total_price(장바구니 총 가격합), wait(대기번호)를 가진다.

 

Screen 생성자: ArrayList들에 상품을 담는다. total_sale과 wait에 0을 대입한다.

 

Screen 클래스의 메소드:

메인 화면 메소드 mainScreen()에서 메인 화면을 출력한다. 사용자가 번호를 누르면 그 값을 반환한다.

숨겨진 화면 메소드 owner()에서 총 판매금액과 총 판매상품을 total_orders를 이용해 출력한다.

상품 내역을 보여주는 메소드 sale(int channel)에서 channel에 맞는 카테고리를 찾아 menus를 이용해 보여준다. 사용자가 상품을 고르면 해당 상품의 옵션을 고르고 장바구니 bucket에 담는다.

장바구니의 상품을 주문하는 메소드 order()에서 bucket을 이용해 상품 내역을 보여주고 주문하면 total_orders에 값을 담는다. bucket과 total_price 등을 초기화한다.

각 메소드는 예외를 throws한다.

 

Main 클래스:

while문을 통해 mainScreen에서 입력한 숫자에 맞는 화면을 screen 메소드를 이용해 출력한다.

예외가 발생하면(정수 이외의 입력을 예상) "잘못된 입력입니다!"를 출력하고 프로그램이 종료된다.

 

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

 

소감: 그래도 팀원들의 코드를 참조하고, 궁금한 것을 물어보기도 하면서 방향을 잡을 수 있어서 좋았다. 예외 처리는 강의에서 본 내용을 흉내내본 정도인데 잘 한 건지는 잘 모르겠다. 그래도 개인적으로는 코드를 완성해서 제출할 수 있어서 뿌듯했고, 더 다양한 것들을 구현해보면서 자바를 연습하고 싶다.


소프트웨어 공학 관점에서 본 OOP

다형성 - 자바의 경우 매개변수가 달라지면 함수의 이름이 같아도 사용할 수 있음

(파이썬의 경우 변수의 타입을 특정할 필요가 없음)

상속성 - 오버라이딩

  • 추상 클래스를 사용하는 경우:
    1. 여러 클래스들을 공통된 특징으로 묶고 싶을 경우
    2. 부모 클래스의 어떤 메소드를 자식 클래스에서 반드시 구현해서 사용하게 할 때

-> 즉, 반드시 오버라이딩을 해야하는 상황에서 사용! 

자바에서는 다중 상속을 지원하지 않음

 

  • 인터페이스를 사용하는 경우: 최소한 존재해야 하는 기능 

추상 클래스: 구체적인 여러 클래스들을 일반화된 개념으로 묶은 것

인터페이스: 여러 클래스들을 행위적 일관성으로 묶은 것

 


enum에 대해 찾아 정리해보았다.

https://jinjinjincode.tistory.com/144

 

열거 타입(Enum)

그동안 Java로 문제 풀이를 할 때 enum을 몰라서 string 배열 등을 사용했었는데 enum을 여러 번 듣게 되어서 한 번 정리 및 공부해보려고 한다. enum 이러한 상수를 단순히 정수로 치부하지 말고 객체

jinjinjincode.tistory.com