## 16. GRASP 패턴: Information Expert 적용
- 메뉴 기능을 각 핸들러에게 위임
- 기능을 수행하는데 필요한 정보를 가지고 있는 객체에 역할 부여
- CRUD 메뉴 기능은 핸들러로 이전
- App 클래스는 메인 메뉴 제공
메뉴 기능을 각 핸들러에게 위임
ㄴ 기능을 수행하는 데 필요한 정보를 가지고 있는 객체에 역할 부여
ㄴ CRUD 메뉴 기능은 핸들러로 이전
App.java
ㄴ 메뉴를 직원, 게시글, 공지, 물품으로 분리
MemberHandler 수정
MemberHandler.java
ㄴ App.java에 있는 메뉴부분 가져와서 이용
App.java
ㄴ 1번 입력 시 memberHandler 의 execute() 실행하도록 수정
MemberHandler.java 수정
public void execute() {
printMenu();
while (true) {
String menuNo = prompt.inputString("메인> ");
if (menuNo.equals("0")) {
break;
} else if (menuNo.equals("menu")) {
printMenu();
} else if (menuNo.equals("1")) {
// memberHandler.inputMember();
} else if (menuNo.equals("2")) {
// memberHandler.printMembers();
} else if (menuNo.equals("3")) {
// memberHandler.viewMember();
} else if (menuNo.equals("4")) {
// memberHandler.updateMember();
} else if (menuNo.equals("5")) {
// memberHandler.deleteMember();
} else {
System.out.println("메뉴 번호가 옳지 않습니다!");
}
}
}
private static void printMenu() {
System.out.println("1. 등록");
System.out.println("2. 목록");
System.out.println("3. 조회");
System.out.println("4. 변경");
System.out.println("5. 삭제");
System.out.println("0. 종료");
}
=> memberHandler 의 execute() 실행하여 회원에 대한 printMenu() 를 출력하도록 함
MemberHandler.java 수정
ㄴ execute() 메서드가 이제 memberHandler 안에 선언되어 있으므로 memberHandler 대신 this 로 변경해줌
이제 inputMember(), printMembers(), viewMember(), toPositionString(char position), updateMember(), inputPosition(char position), deleteMember(), indexOf(int memberNo), available()는 memberHandler 클래스 내부에서만 사용되므로 private 이 아닌 메서드 private 으로 변경
MemberHandler.java
MemberHandler 생성자에 파라미터 변경
ㄴ title 파라미터 추가
MemberHandler.java
ㄴ MemberHandler.java 에서 prompt 에 띄워줄 제목 변수 title을 private 으로 선언
ㄴ MemberHandler 에서 넘겨주는 값에 title 파라미터도 추가
ㄴ 추가한 파라미터 적용
App.java 수정
ItemHandler 와 BoardHandler 도 MemberHandler 와 동일하게 수정
ItemHandler 수정
ItemHandler.java
public void execute() {
printMenu();
while (true) {
String menuNo = prompt.inputString("회원> ");
if (menuNo.equals("0")) {
break;
} else if (menuNo.equals("menu")) {
printMenu();
} else if (menuNo.equals("1")) {
this.inputItem();
} else if (menuNo.equals("2")) {
this.printItems();
} else if (menuNo.equals("3")) {
this.viewItem();
} else if (menuNo.equals("4")) {
this.updateItem();
} else if (menuNo.equals("5")) {
this.deleteItem();
} else {
System.out.println("메뉴 번호가 옳지 않습니다!");
}
}
}
private static void printMenu() {
System.out.println("1. 등록");
System.out.println("2. 목록");
System.out.println("3. 조회");
System.out.println("4. 변경");
System.out.println("5. 삭제");
System.out.println("0. 종료");
}
=> ItemHandler 의 service() 실행하여 물품에 대한 printMenu() 를 출력하도록 함
이제 inputItem(), printItems(), viewItem(), updateItem(), inputType(String type), deleteItem(), indexOf(int ItemNo), available()는 ItemHandler 클래스 내부에서만 사용되므로 private 이 아닌 메서드 private 으로 변경
ItemHandler.java
App.java 수정
ㄴ 2번 입력 시 ItemHandler 의 execute() 실행하도록 수정
MemberHandler 생성 title파라미터 변경
ㄴ title 파라미터 추가
ㄴ ItemHandler.java 에서 prompt 에 띄워줄 제목 변수 title을 private 으로 선언 후 ItemHandler 에서 넘겨주는 값에 title 파라미터도 추가
ㄴ 추가한 파라미터 적용
App.java 수정
BoardHandler 수정
BoardHandler.java
public void service() {
printMenu();
while (true) {
String menuNo = prompt.inputString("게시글> ");
if (menuNo.equals("0")) {
break;
} else if (menuNo.equals("menu")) {
printMenu();
} else if (menuNo.equals("1")) {
this.inputBoard();
} else if (menuNo.equals("2")) {
this.printBoards();
} else if (menuNo.equals("3")) {
this.viewBoard();
} else if (menuNo.equals("4")) {
this.updateBoard();
} else if (menuNo.equals("5")) {
this.deleteBoard();
} else {
System.out.println("메뉴 번호가 옳지 않습니다!");
}
}
}
private static void printMenu() {
System.out.println("1. 등록");
System.out.println("2. 목록");
System.out.println("3. 조회");
System.out.println("4. 변경");
System.out.println("5. 삭제");
System.out.println("0. 종료");
}
=> BoardHandler 의 service() 실행하여 게시글에 대한 printMenu() 를 출력하도록 함
이제 inputItem(), printItems(), viewItem(), updateItem(), inputType(String type), deleteItem(), indexOf(int ItemNo), available()는 ItemHandler 클래스 내부에서만 사용되므로 private 이 아닌 메서드 private 으로 변경
BoardHandler.java
App.java 수정
ㄴ 3번 입력 시 ItemHandler 의 service() 실행하도록 수정
BoardHandler 생성 title파라미터 변경
ㄴ title 파라미터 추가
ㄴ ItemHandler.java 에서 prompt 에 띄워줄 제목 변수 title을 private 으로 선언 후 ItemHandler 에서 넘겨주는 값에 title 파라미터도 추가
ㄴ 추가한 파라미터 적용
App.java 수정