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를 사용하여 간단한 메시지를 주고 받는 클라이언트 만들기를 연습

  • 소켓 클래스를 이용하여 서버에 접속한다.
  • 소켓의 입출력 스트림을 이용하여 서버와 데이터를 주고 받는다.

Categories:

Updated: