2020-10-15 TIL

1 minute read

34-g

  • 클라이언트 명령이 들어오면 커맨드 객체를 찾아 실행한다.
  • pms.handler.Command 변경
  • execute() 를 execute(PrintWriter out)로 변경
  • 서버앱을 수정(쓸모없는 코드는 삭제)

if (command != null) { command.execute(out); } else { out.println(“해당 명령을 수행할 수 없습니다.”); } out.println(); // 응답의 끝을 알려주는 빈문자열 out.flush();

06) Command를 상속받는 handler 클래스들을 수정

- XxxListCommand 의 execute()가 파라미터를 받게 만들고 system.out.print() 메서드를 out.print()로 수정하여 out을 사용하게 만든다. ## 07) 클라이언트에게 입력값을 요구할 수 있도록 프로토콜을 변경한다.
[클라이언트]                [서버]
명령      ---------------> 작업수행
"/board/detail"
출력      <--------------- 출력 문자열
                          "번호"
사용자 입력 <--------------- 입력을 요구하는 명령
                          !{}!
입력값     ---------------> 작업 수행
"1"
출력      <--------------- 출력 문자열
                          "제목 : 하하하"
출력      <--------------- 출력 문자열
                          "내용 : ㅋㅋㅋ"
출력      <--------------- 출력 문자열
                          "작성자 : 홍길동"
완료      <--------------- 빈 문자열
사용자 입력 <--------------- !{}!
입력값     ---------------> 작업 수행
출력      <--------------- 출력 문자열
완료      <--------------- "" 빈 문자열

07)

  • Command 인터페이스 변경
    • 클라이언트가 보낸 데이터를 읽을 때 사용할 입력 스트림을 파라미터로 받는다.
    • void execute(PrintWriter out, BufferedReader in);
  • prompt 수정
    • input* 코드들을 오버로딩한다.
      • 파라미터 수정
      • 클라이언트에게 출력하고 입력을 받도록 코드 수정
    • Xxx[Add Delete Detail Update]Command 수정
    • 클라이언트 앱도 변경해줘야 한다.
      • 서버가 입력 값을 요구하면 사용자로부터 읽어서 보낸다.

    private static void receiveResponse(PrintWriter out, BufferedReader in) throws Exception { while (true) { String response = in.readLine(); if (response.length() == 0) { break; } else if (response.equals(“!{}!”)) { // 사용자로부터 값을 입력을 받아서 서버에 보낸다. // !{}!는 출력되면 안되기 때문에 빈 문자를 보낸다. out.println(Prompt.inputString(“”)); out.flush(); } else { System.out.println(response); }

    System.out.println(response);   } }
    
  • 파라미터가 다르더라도 같은 일을 하는 메서드에 대해서 같은 이름을 부여하는 것으로 프로그래밍에 일관성을 제공해 주는 것이 오버로딩이다.
  • 상속받은 메서드가 서브 클래스의 역할에 맞지 않을 때 재정의 하는 것을 오버라이딩이라고 한다.

OOP

  • 캡슐화, 상속, 다형성 + 디자인 패턴, 리팩토링
    • 목표: 소스 코드를 보다 쉽게 관리하는 것
      • 1) 읽기 쉬워야 한다.
      • 2) 기능 추가, 변경, 삭제할 때 기존 코드를 최소로 손대야 한다.
  • ServerApp
    • Command 패턴 -> 새 명령을 쉽게 추가할 수 있다.
    • c/s 어플리케이션 아키텍처
      • 기능 추가를 하더라도 사용자 pc에 프로그램을 재설치 할 필요가 없다.

08)

  • 디자인 패턴과 c/s 애플리케이션 아키텍처의 유용성을 확인
    • 계산기 클래스를 새로 삽입해서 기존 소스 코드를 최소한으로 손대면서 새 기능을 추가하는 것을 확인한다.

35 서버

01) quit, stop 명령어 처리

35 클라이언트

stateful 을 stateless로 바꾼다.

  • 네이버같은 불특정 다수를 상대로 하는 사이트는 stateless 방식을 사용한다.
  • 게임이나 스트리밍은 statefull 방식을 사용한다.

01) 서버에 연결할 때 한번만 요청/응답하도록 변경한다.

  • 서버에 연결하면 quit 명령을 보낼 때까지 계속 연결되어 있는 기존의 stateful 통신 방법을 서버에 연결했을때 한번만 요청하고 응답하는 stateless 통신 방법으로 변경한다.

Categories:

Updated: