2020-10-15 TIL
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); } } - input* 코드들을 오버로딩한다.
- 파라미터가 다르더라도 같은 일을 하는 메서드에 대해서 같은 이름을 부여하는 것으로 프로그래밍에 일관성을 제공해 주는 것이 오버로딩이다.
- 상속받은 메서드가 서브 클래스의 역할에 맞지 않을 때 재정의 하는 것을 오버라이딩이라고 한다.
OOP
- 캡슐화, 상속, 다형성 + 디자인 패턴, 리팩토링
- 목표: 소스 코드를 보다 쉽게 관리하는 것
- 1) 읽기 쉬워야 한다.
- 2) 기능 추가, 변경, 삭제할 때 기존 코드를 최소로 손대야 한다.
- 목표: 소스 코드를 보다 쉽게 관리하는 것
- ServerApp
- Command 패턴 -> 새 명령을 쉽게 추가할 수 있다.
- c/s 어플리케이션 아키텍처
- 기능 추가를 하더라도 사용자 pc에 프로그램을 재설치 할 필요가 없다.
08)
- 디자인 패턴과 c/s 애플리케이션 아키텍처의 유용성을 확인
- 계산기 클래스를 새로 삽입해서 기존 소스 코드를 최소한으로 손대면서 새 기능을 추가하는 것을 확인한다.
35 서버
01) quit, stop 명령어 처리
35 클라이언트
stateful 을 stateless로 바꾼다.
- 네이버같은 불특정 다수를 상대로 하는 사이트는 stateless 방식을 사용한다.
- 게임이나 스트리밍은 statefull 방식을 사용한다.
01) 서버에 연결할 때 한번만 요청/응답하도록 변경한다.
- 서버에 연결하면 quit 명령을 보낼 때까지 계속 연결되어 있는 기존의 stateful 통신 방법을 서버에 연결했을때 한번만 요청하고 응답하는 stateless 통신 방법으로 변경한다.