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

JAVA 17일차 (2023-06-15) 자바 기초 DAY15_GRASP 패턴 : Information Expert 적용_개인프로젝트 - 마트 관리 시스템

by prometedor 2023. 6. 15.
## 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 수정