Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- BFS
- 구현
- spring boot
- 메모이제이션
- 서비스 디스커버리
- Gradle
- 구간 트리
- 유레카
- 완전 탐색
- 달팽이
- 주울
- 백트래킹
- Java
- 게이트웨이
- ZuulFilter
- 스택
- docker-compose
- 스프링 시큐리티
- Spring Cloud Config
- 이분 매칭
- 비트마스킹
- Logback
- spring cloud
- dp
- 다익스트라
- 이분 탐색
- 플로이드 와샬
- 도커
- Zuul
- 트리
Archives
- Today
- Total
Hello, Freakin world!
[채팅앱][클라이언트] EventHandler 클래스 설계 본문
selectionKey 객체는 이벤트와 함께 넘어오며 이벤트가 발생한 채널 객체 정보를 가지고 있다.
event 로 감쌌지만 이벤트라는 개념을 설명하기 위한 가상의 객체다.
(그런데 생각해보니 Event 클래스를 만들어두는게 더 나을지도 모른다는 생각이 들었다. 지금은 넘어가자)
EventLoop 스레드에서 selectionKey 객체를 핸들러의 delegate 메서드의 파라미터로 넘겼었다.
delegate 메서드는 핸들러에 내부의 메서드들 중 적절한 메서드와 해당 키를 매핑한다.
이런 일대다의 관계에서 매핑을 구현하기 위해 if문을 사용하면
결국 '다'부분의 가짓수가 늘어남에 따라 점점 가독성이 떨어지고 유지보수하기 어려운 코드가 탄생한다.
이를 해결하기 위해 애너테이션을 이용하자.
예를 들면, 스프링의 @RequestMapping 처럼.
이를 구현하기 위해서 필요한 몇 가지가 있다.
1. @Event 애너테이션
- 내부에 이벤트를 구분하는 무언가가 필요하다.
String을 이용할 수도 있겠지만, 그것보단 enum을 사용하는게 더 깔끔해보인다.
2. enum JavaType
- 애너테이션 인터페이스에 등장해 이벤트를 구분하기 위한 정보를 담고 있다..
3. dispatch 메서드
- 이 메서드 작성하기 위해서는 자바 리플렉션 api에 대한 지식이 필요하다.
뭐 별로 어려울 거 없다.
이제 EventHandler 클래스를 작성해보자!! (갑자기 핫핑크가 끌리네 ㅎ)
'Toy Project > 채팅 앱 만들기' 카테고리의 다른 글
[채팅앱][클라이언트] EventHandler 코드 작성하기 (0) | 2020.03.01 |
---|---|
[채팅앱][클라이언트] EventHandler 클래스 및 아키텍처 수정 (0) | 2020.02.28 |
[채팅앱][클라이언트] EventLoop 클래스 작성하기 - 반드시 단위 테스트 작성해야만 하는가에 대해서 (0) | 2020.02.27 |
[채팅앱][클라이언트] SelectorManager 클래스 작성하기 (0) | 2020.02.27 |
[채팅앱][클라이언트] 이벤트 아키텍쳐 설계 (0) | 2020.02.27 |
Comments