이벤트
어떤 특정 행동이 발생한 그 자체
이벤트 처리 구조
각 이벤트 소스마다 이벤트 리스너와 연결
- 이벤트 소스 객체 : 이벤트 발생
- 이벤트 리스너 객체 : 이벤트 소스에서 발생한 이벤트 처리, 이벤트 핸들러 메서드 자동 호출
- 이벤트 핸들러 메서드 : 전달된 이벤트 처리
이벤트 처리 과정
- 이벤트 소스에서 이벤트 발생
- 이벤트 객체 생성
- 이벤트 소스에서 연관된 리스너에 이벤트 객체 전달
- 이벤트 리스너의 이벤트 핸들러 메서드 실행
이벤트 객체
- 발생한 이벤트에 관한 정보 가짐
- 포함하는 정보 : 이벤트 소스와 이벤트 종류 등...
이벤트 리스너
- 각 이벤트에 대한 이벤트 핸들러 메서드를 구현하기 위한 객체
- 인터페이스 형태로 제공 - 각 핸들러에 대한 추상메서드 포함
- 각 이벤트 소스는
add~Listener() 메서드 호출로 ~이벤트 발생시 처리할 이벤트 리스너 객체 지정
이벤트 처리 방법
- 이벤트 소스 결정
- 이벤트 리스너 구현
- 이벤트 소스와 이벤트 리스너 연결
add~Listener()의 인수인 리스너 생성 방법
- 현재 클래스 사용 -
this 사용
- 일반 클래스 사용
- 내부 클래스 사용
- 익명 내부 클래스 사용 (많이 사용) - 하나의 리스너를 여러 이벤트 소스가 공유할때 적합
- 익명 내부 클래스 임시 객체 사용 (많이 사용) - 각 이벤트 소스마다 별도의 리스너 지정시 적합
외부 변수 조작
- 리스너 객체를 내부 클래스로 구현한 경우 핸들러 내부에서 외부의 변수 액서스
- 리스너에서 왜부 객체의 멤버는 자유롭게 참조 가능
- 리스너가 등록 메서드의 지역 변수를 참조하려면
final 지정자가 필요함
리스너 등록 메서드가 add인 이유
- 한 컴포넌트는 서로 다른 이벤트에 대한 리스너를 동시에 여러개 가질 수 있음
- 한 컴포넌트는 한 이벤트에 대해 여러개의 리스너를 동시에 가질 수 있음