소프트웨어 아키텍처 - 28(Non-buffered
Event-Based
Implicit
Invocations
Architecture
Style)
Non-buffered Event-Based Implicit Invocations Architecture Style
- 구조
- 두 파트로 분리
- 이벤트 소스(이벤트 발생)와 이벤트 리스너(이벤트가 발생하면 이를 처리할 수 있는 객체 또는 함수)
- 이벤트 등록 프로세스
- 이벤트 소스와 이벤트 리스너 간의 등록 프로세스가 중요
- 리스너는 특정 이벤트를 처리하려고 할 때 해당 이벤트 소스에 등록
- 등록 프로세스를 통해 두 파트 간의 연결이 이루어짐
- 버퍼 없는 통신
- 중요한 특징은 두 파트 간에 버퍼가 없다는 것
- 이벤트가 발생하면 이벤트 소스에서 직접 리스너에게 전달
- 사용자 정의 이벤트 소스 및 이벤트 수신자를 위한 클래스 다이어그램
- 사용자가 정의한 이벤트 소스와 이벤트 수신자를 나타내는 다이어그램
- 이벤트 소스
- 이벤트 수신자
- 이벤트 클래스
- 이벤트 소스와 이벤트 수신자 간의 상호 작용
- 다중 스레드
Non-buffered Event-Based
- oracle developer 데이터베이스 애플리케이션
- 트리거 함수로 데이터베이스 내의 이벤트나 조건이 충족될 떄 다른 작업을 트리거
- IDE for CASE도구(통합 개발 환경)
- 코드 편집 컴파일 디버깅 등의 이벤트에 기반 트리거 발생
- 디버깅 처리
- 디버깅 도구에서 중단점에 도달하면 이벤트가 발생
- 재고 관리 시스템
- 사용자가 특정 주식의 상한 하한 임계값 설정
- 임계값 도달시 이벤트 발생
적용 도메인
- 상호작용하는 GUI컴포넌트 간의 통신 및 IDE도구
- 컴포넌트 간에 느슨한 결합이 필요하며 비동기 작업을 트리거해야 하는 어플
- State Machine구현
- 응용 프로그램 내에서 이벤트 처리가 예측하기 어려운 경우
장,단점
- 장점
- 컴포넌트의 재사용
- 시스템 유지 보수 및 진화
- 독립성 및 유연한 연결
- 실행 중에 동적으로 이벤트 등록 및 해제 가능
- 이벤트 처리의 병렬 실행
- 제한사항(단점)
- 이벤트 소스와 리스너 간의 응답 및 응답 순서 예측이 어려워 디버깅이 힘듬
- 버퍼 없는 이벤트 기반 시스템에서 메시지 큐 또는 메시지 토픽을 사용하면 소스와 리스너 간의 결합이 강해질 수 있음