2020-10-13 TIL
1 minute read
33 파일 입출력에 옵저버 디자인 적용하기
디자인 패턴을 적용하는 이유
- 코드 구조가 복잡해지더라도 기존 기능에 다른 기능을 추가하거나 삭제하는 것을 조금 더 쉽게 하기 위해서
옵저버 등록
- 인터페이스는 호출 규칙
- App 에서 기능을 추가할 때 인터페이스인 ApplicationContextListener를 통해서 AppInitListener를 등록한다.
웹 서버에 등록할 때는
- @WebServlet 라는 애노테이션을 통해서 클래스를 등록할 수 있다.
패키지를 만들 때
- 특정 클래스에서만 쓸때는 그 특정 클래스가 포함된 패키지 아래에 패키지를 생성하지만 범용으로 사용할 때는 도메인 아래에 패키지를 생성하는 것이 좋다.
- 예)
- eomcs/context/ApplicationContextListener
- eomcs/pms/App
- eomcs/pms/listner/AppInitListener
앱과 옵저버 사이의 데이터 공유
- 데이터를 공유할 수 있도록 규칙에 파라미터를 추가한다.
- 1) App에서 key value를 사용하는 Map을 생성
- 2) 메서드 호출
- 3) Observer에서 맵에 저장된 값을 사용해서 작업을 수행
- 4) 작업 결과를 맵에 저장
- 5) 맵에 저장된 결과 값을 App에서 꺼낸다.
hashtable/ hashmap
- hashmap은 키나 밸류에 null을 허용한다.
- hashtable은 키내 밸류에 null을 허용하지 않는다.
- hashmap은 멀티스레드 환경에서 사용되는 것을 보장하지 않는다.
- 여러 스레드가 해시맵에 접근하는 것을 허용
- 락을 걸지 않는다.
- hashtable은 여러 스레드가 접근하지 못하도록 한다.
- 하나의 스레드가 접속했을 경우 다른 스레드는 기다려야 한다.
- 락을 건다.
인아웃 파라미터
- 인 파라미터 = 값을 받는 파라미터
- 아웃 파라미터 = 값을 리턴하는 파라미터
- 값을 받거나 리턴하는 것을 동시에 할 수 있는 파라미터 = 인아웃 파라미터
옵저버가 작업한 결과를 맵에서 꺼낼 때
- 자바는 옵저버가 작업한 결과를 맵에서 꺼낼 때 확인을 할 수 없기 때문에 경고를 띄운다.
데이터핸들러리스너에서 데이터를 로딩할 때
- 로딩한 파일을 해시테이블에 put(String key, Object value)을 이용해서 저장한다.
34 네트워크 API를 활용하여 애플리케이션 사이에 데이터 주고받기 - stateful 통신
이클립스 설정
- 폴더 준비
- 해당 폴더에서 gradle init
- build 파일 수정 id ‘eclipse’
- eclipse에 임포트 하기 위해 필요한 설정 파일을 생성하기 위한 플러그인을 준비한다.
- gradle eclipse
- 빌드 파일 수정 시 gradle cleaneclipse 후 gradle eclipse
- 설정 파일 생성
네크워크 API를 사용하여 간단한 메시지를 주고 받는 클라이언트 만들기를 연습
- 소켓 클래스를 이용하여 서버에 접속한다.
- 소켓의 입출력 스트림을 이용하여 서버와 데이터를 주고 받는다.