2021년 목표설정

이미지
기본적으로 작년에 달성하지 못한 것들을 하려고 생각중인데..코로나가 언제까지 이어질지, 한국이나 북해도는 갈 수 있을지..자격증은 응시 가능할지..여러가지가 불확실하다. 2021년은 무엇보다 정신적인 부분과 경제적인 부분에 중점을 두고 조금 더 치열하게 지내보고 싶다. 일본나이로도 30대 마지막 해, 이제 불혹에 접어드는 나이..복잡하지만 심플하게. 육체적목표 : 트라이에슬론 스탠다드 도전하기 정신적 : 자격증2개 도전 + 자체개발 서비스 론칭 가족적 : 가정의 평화를 유지하기 경제적 : 외식과 유흥비를 줄이고 부수입을 늘려서 결과적으로 저축하기 사회적 : 목표세미나를 포함해서 민단과 개인인맥의 활성화와 교류를 촉진하기

Delegation event model 은 무엇인가??

과제 정말 머리 쥐어뜯으면서 하다가 제출 20분 전 유레카!!! 라고 외치면서...
2일간 삽질했던 것을 고작 20분만에 해결했던 그 짜릿했던 경험!! ㅎㅎ
Java에서 Bean사이의 통신? 즉 작업을 진행하는 방식이 바로 Event 모델이다.
우리가 일상적으로 event라고 하는 것은 평소에는 잘 안 하지만 특별한 날 특별한 무언가를 하는 것을 지칭하듯,
java에서 말하는 event는 무언가 특별한 '동작' 이 일어난 경우를 이야기한다.
대표적인 이벤트로는...
풍선 이벤트...노래 이벤트...프로포즈 이벤트...깜짝 이벤트...등등이 하고 싶다...(퍼벅..!!!)

헛소리 그만하고.
마우스가 동작하는 경우(클릭/더블클릭/드레그) 혹은 키보드를 사용한 경우(어떤 특정 키가 눌러진 경우 등..)
혹은 프로그램의 속성 및 값이 변경된 경우등이 있다.
이런 동작들을 event라고 하고, 이 이벤트가 발생되는 것을 이벤트의 발생(Fire) 이라고 한다.
또한 이런 event가 발생되었을 때, '아 이벤트가 발생되었군!!' 이라고 인지를 한 다음, 필요한 작업을 진행하도록
하는 녀석을 'event Listener' 라고 한다.

그럼 대체 위임모델, Delegation event model이라는 건 뭐시기냐??
이벤트라는 게 대체 얼마가 될지, 어디서 뭐가 일어날지 그리고 이벤트가 일어나면 어디가 변해야하는지....
이걸 각각의 Bean에다가 적어버리면 소스가 복잡해지기 때.문.에!!!
이벤트만 전문적으로 처리해주는, 즉 이벤트 대행업체 같은 중개자 역활을 하는 것을 하나 만들자!! 라는 것이다.
자, 그림으로 보자~(역시 일본어가 드문드문 쓰여있지만, 새로 만들기 귀찮으므로 패스!!!)


이 그림을 보면, 프로그램 상단에 '월(月)' 을 고르는 부분이 VacancyScrollBean이라는 엄청난 긴 이름으로
정의되어 있고, 밑의 테이블과 버튼 부분은 VacancyContentsBean 으로 정의되어 있다.
그림에서 보듯, 각 Bean은 각각의 GUI 요소들을 가지고 있다.
VacancyScrollBean에는 빨간색 화살표가 JButton, 월을 표시하는 부분은 Lable로 표시되어 있다.
또한 밑부분의 VacancyContentsBean 은 JLabel과 JTable을 가지고 있다.

여기서 예를 들어서 VacancyScrollBean에 있는 JButton, 즉 빨간 화살표를 누르면, 그에 맞게 밑의 JTabel이
변하게 하고싶은 경우가 바로 Event를 발생시켜야 하는 경우가 되겠다.
또한 그림에서 보듯, 밑의 테이블의 날짜가 30일이 되는 경우, 자동적으로 위의 월 표시 부분이 변하게 하고싶은
경우에도 역시 Event를 사용하게 된다.
예를 들어서 화살표를 누를 때 밑의 테이블이 변하는 경우를 보자면..
화살표를 누르는 것이 Event이고 이 이벤트가 발생되었을 때 변하는 테이블이 바로 타겟이 되는 것이다.
그리고 이벤트가 발생되면, 이벤트 리스너는 이 이벤트를 감지한 후, 테이블, 즉 타겟이 가지고 있는 메소드를
호출해서 실행하게 된다.

이런 이벤트를 중개하기 위해서, 각 Event를 정의하고 리스너를 등록하며, 그 액션에 대해서 반응하게
될 타겟을 등록하게 되는데, 이 그림에서 보면 Bean 사이의 노란 박스가 바로 그 중개자이며..
이를 어뎁터(Adapter) 라고 부른다.

아...엄청 길게도 썼지만 결국 위임이벤트 모델이라는 것을 간단히 정리하자면!!
발생되는 이벤트와 각 이벤트에 대한 이벤트리스너, 그리고 이벤트에 대해서 반응하는 타겟에 대한
내용을 가지고 있으면서, 각 Bean에서 발생되는 이벤트를 관리하기 위해서 이벤트 전용 어뎁터를
이용하는...이벤트 처리 모델!!

이를 UML 다이어그램으로 나타낸 녀석을 보자면 대충 이렇다.


다음 포스팅에서는, 이를 실제로 예제소스로 구현한!! 유레카를 외친 후 20분만에 만들어냈던!!
소스코드를 공개합니다!! (두둥~) ... 아무도 관심 없어...ㅠㅠ

댓글

이 블로그의 인기 게시물

[메모] PostgreSQL에서 Insert 하는 경우 자동채번 PK가 중복에러 나는 경우

[C# & LINQ] 랜덤으로 데이터를 한 개 추출하는 방법

[react-native] uuid 생성이 에러가 날 때 대처법