Hello, Freakin world!

[채팅앱][클라이언트] EventHandler 클래스 설계 본문

Toy Project/채팅 앱 만들기

[채팅앱][클라이언트] EventHandler 클래스 설계

johnna_endure 2020. 2. 27. 14:34

selectionKey 객체는 이벤트와 함께 넘어오며 이벤트가 발생한 채널 객체 정보를 가지고 있다.

event 로 감쌌지만 이벤트라는 개념을 설명하기 위한 가상의 객체다.

(그런데 생각해보니 Event 클래스를 만들어두는게 더 나을지도 모른다는 생각이 들었다. 지금은 넘어가자)

 

EventLoop 스레드에서 selectionKey 객체를 핸들러의 delegate 메서드의 파라미터로 넘겼었다.

delegate 메서드는 핸들러에 내부의 메서드들 중 적절한 메서드와 해당 키를 매핑한다.

 

이런 일대다의 관계에서 매핑을 구현하기 위해 if문을 사용하면

결국 '다'부분의 가짓수가 늘어남에 따라 점점 가독성이 떨어지고 유지보수하기 어려운 코드가 탄생한다.

 

이를 해결하기 위해 애너테이션을 이용하자.

예를 들면, 스프링의 @RequestMapping 처럼. 

 

이를 구현하기 위해서 필요한 몇 가지가 있다.

 

1. @Event 애너테이션 

- 내부에 이벤트를 구분하는 무언가가 필요하다.

String을 이용할 수도 있겠지만, 그것보단 enum을 사용하는게 더 깔끔해보인다. 

 

2. enum JavaType 

- 애너테이션 인터페이스에 등장해 이벤트를 구분하기 위한 정보를 담고 있다..

 

3. dispatch 메서드

- 이 메서드 작성하기 위해서는 자바 리플렉션 api에 대한 지식이 필요하다. 

뭐 별로 어려울 거 없다. 

 

이제 EventHandler 클래스를 작성해보자!! (갑자기 핫핑크가 끌리네 ㅎ)

Comments