본문 바로가기
네이버클라우드/JAVA 웹 프로그래밍

JAVA 21일차 (2023-06-21) 자바 기초 DAY19_Command 패턴을 활용하여 메뉴 기능 구현하기_개인프로젝트 - 마트 관리 시스템

by prometedor 2023. 6. 22.
## 23. Composite, Command, Observer 디자인 패턴, 추상 클래스/메서드 활용하기

- Command 패턴을 활용하여 메뉴 기능 구현하기
  - BoardHandler, MemberHandler에 적용
  - ActionListener 인터페이스 활용
  - BoardXxxListener, MemberXxxListener 클래스로 분해

Command 패턴을 활용하여 메뉴 기능 구현하기

ㄴ BoardHandler 에 적용
ㄴActionListener 인터페이스 활용
ㄴ BoardXxxListener 클래스로 분해

 

BoardAddListener 생성

BoardAddListener.java

=>

ㄴ BoardAddListener 라는 이름으로 BoardHandler 를 복사

ㄴ Handler ->  ActionListener 로 변경

 

BoardAddListener.java

=>

BoardAddListener.java

ㄴ BoardAddListener 클래스에서 List 를 제외하고 모두 제거

 

BoardAddListener.java

=>

ㄴ execute() -> service()

ㄴ BreadcrumbPrompt 를 파라미터로 추가

 

BoardAddListener.java

ㄴ 선택 코드 제거

 

BoardAddListener.java

ㄴ 해당 코드를 service(BreadcrumbPrompt prompt) 메서드로 이동

=>

ㄴ BoardAddListener 클래스 내부에 prompt 멤버 변수가 정의되어 있지 않기 때문에 prompt 앞에 this 는 모두 제거

(외부에서 받아오는 prompt 사용)

=>

BoardAddListener.java

ㄴ BoardAddListener 완성 코드

 

 

BoardListListener 생성

BoardListListener.java

ㄴ BoardAddListener 라는 이름으로 BoardHandler 를 복사

ㄴ Handler ->  ActionListener 로 변경

ㄴ ActionListener 인터페이스 import 해주기

 

BoardListListener.java

ㄴ BoardListListener 클래스에서 List 를 제외하고 모두 제거

 

BoardListListener.java

ㄴ execute() -> service()

ㄴ BreadcrumbPrompt 를 파라미터로 추가

 

BoardListListener.java

ㄴ printBoards 메서드를 제외한 나머지 모두 제거

ㄴ 해당 코드를 service(BreadcrumbPrompt prompt) 메서드로 이동

 

BoardListListener.java

 

ㄴ BoardListListener 완성 코드

 

BoardDetailListener 생성

BoardDetailList.java

ㄴ BoardDetailListener 라는 이름으로 BoardHandler 를 복사

ㄴ Handler ->  ActionListener 로 변경

ㄴ ActionListener 인터페이스 import 해주기 (Ctrl + Shift + O)

 

BoardDetailListener.java

ㄴ BoardDetailListener 클래스에서 List 를 제외하고 모두 제거

 

BoardDetailListener.java

ㄴ execute() -> service()

ㄴ BreadcrumbPrompt 를 파라미터로 추가

 

BoardDetailListener.java

ㄴ viewBoard(), findBy() 메서드를 제외한 나머지 모두 제거 (findBy()메서드는 viewBoard() 메서드 안에서 사용하므로 제거하지 않음)

ㄴ 해당 코드를 service(BreadcrumbPrompt prompt) 메서드로 이동

 

BoardDetailListener.java

ㄴ BoardDetailListener 클래스 내부에 prompt 멤버 변수가 정의되어 있지 않기 때문에 prompt 앞에 this 는 모두 제거

(외부에서 받아오는 prompt 사용)

 

BoardDetailListener.java

ㄴ BoardDetailListener 완성 코드

 

 

 

BoardUpdateListener 생성

BoardUpdateList.java

 

ㄴ BoardHandler 를 BoardUpdateListener 라는 이름으로 복사

 

BoardUpdateList.java

ㄴ Handler ->  ActionListener 로 변경

ㄴ ActionListener 인터페이스 import 해주기 (Ctrl + Shift + O)

 

BoardUpdateListener.java

ㄴ BoardUpdateListener 클래스에서 List 를 제외하고 모두 제거

 

BoardUpdateListener.java

ㄴ execute() -> service()

ㄴ BreadcrumbPrompt 를 파라미터로 추가

 

BoardUpdateListener.java

ㄴ UpdateBoard(), findBy() 메서드를 제외한 나머지 모두 제거 (findBy()메서드는 UpdateBoard() 메서드 안에서 사용하므로 제거하지 않음)

ㄴ 해당 코드를 service(BreadcrumbPrompt prompt) 메서드로 이동

 

BoardUpdateListener.java

ㄴ BoardUpdateListener 클래스 내부에 prompt 멤버 변수가 정의되어 있지 않기 때문에 prompt 앞에 this 는 모두 제거

(외부에서 받아오는 prompt 사용)

 

BoardDetailListener.java

ㄴ BoardDetailListener 완성 코드

 

 

BoardDeleteListener 생성

BoardDeleteList.java

ㄴ BoardHandler 자체를 BoardDeleteListener 라는 이름으로 변경(Refactor 이용)

 

BoardDeleteList.java

ㄴ Handler ->  ActionListener 로 변경

ㄴ ActionListener 인터페이스 import 해주기 (Ctrl + Shift + O)

 

BoardDetailListener.java

ㄴ BoardDeleteListener 클래스에서 List 를 제외하고 모두 제거

 

BoardDeleteListener.java

ㄴ execute() -> service()

ㄴ BreadcrumbPrompt 를 파라미터로 추가

 

BoardDeleteListener.java

ㄴ viewBoard() 메서드를 제외한 나머지 모두 제거

ㄴ 해당 코드를 service(BreadcrumbPrompt prompt) 메서드로 이동

 

BoardDeleteListener.java

ㄴ BoardDetailListener 클래스 내부에 prompt 멤버 변수가 정의되어 있지 않기 때문에 prompt 앞에 this 는 모두 제거

(외부에서 받아오는 prompt 사용)

 

BoardDeleteListener.java

ㄴ BoardDeleteListener 완성 코드

 

 

Command 패턴을 활용하여 메뉴 기능 구현하기

ㄴ MemberHandler 에 적용
ㄴActionListener 인터페이스 활용
ㄴ MemberXxxListener 클래스로 분해

=> Board 와 같은 방법으로 구현

 

Command 패턴을 활용하여 메뉴 기능 구현하기

ㄴ ItemHandler 에 적용
ㄴActionListener 인터페이스 활용
ㄴ ItemXxxListener 클래스로 분해

=> Board 와 같은 방법으로 구현

 

 

Menu 클래스와 App 클래스 수정

Menu.java

ㄴ this.addActionListener(listener); => 생성자로 전달된 ActionListener 객체를 현재 Menu 객체에 등록

 

Menu.java

ㄴ this(title); => 위에 있는 첫 번째 생성자 ( Menu(String title) )를 호출하여 title 값을 초기화

=> 생성자에서 생성자를 호출함

 

App.java

ㄴ boardList, noticeList 는 변경, 삭제가 많이 이루어지므로 LinkedList 로 선언

ㄴ memberList, itemList 는 조회가 많이 이루어지므로 ArrayList 로 선언

 

App.java

ㄴ Menu 클래스에 추가한 생성자 Menu(String title, ActionListener listener) {...} 에서 ActionListener 파라미터에 각각 new BoardAddListener(boardList), new BoardListListener(boardList), new BoardDetailListener(boardList), new BoardUpdateListener(boardList), new BoardDeleteListener(boardList) 를 넣어줌

 

=> MemberMenu, ItemMenu, NoticeMenu 도 같은 방법으로 수정