이벤트 처리
버튼이 눌리기 전까지 프로그램은 무엇을 하고 있을까?
화면을 누르면 다음 장으로 넘어갑니다
이벤트
차례대로가 아니라 기다리다가
이벤트(event)는 어떤 일이 일어났다는 알림입니다. 버튼을 마우스로 누르는 것이 그 예입니다. 이벤트에 응답해 실행되는 코드가 이벤트 처리기(event handler)입니다. 이런 프로그램은 기다리다가 일이 생기면 움직입니다.
버튼과 창을 눌러 쓰는 화면을 GUI(그래픽 사용자 인터페이스)라고 합니다.
자바 이벤트 모델
발생자가 리스너에게 알립니다
사용자가 GUI 컴포넌트를 건드리면 이벤트가 만들어집니다. 그 컴포넌트가 이벤트 발생자(event generator), 이벤트를 받아 처리하는 객체가 이벤트 리스너(event listener)입니다.
컴포넌트는 버튼, 체크 상자 같은 화면의 부품입니다. 발생자는 리스너의 메서드를 불러 이벤트를 알립니다.
등록
등록한 리스너에게만 갑니다
발생자는 리스너로 등록해 둔 객체에게만 이벤트를 보냅니다. 자바에서는 addItemListener 같은 메서드로 등록합니다. 등록하지 않은 객체에는 이벤트가 가지 않습니다.
객체 A, B, C는 예시입니다. ItemEvent는 체크 상자나 라디오 버튼을 누르면 생기는 이벤트입니다.
리스너 인터페이스
처리기의 이름과 꼴은 약속돼 있습니다
발생자가 리스너의 어떤 메서드를 부를지는 미리 정해져 있어야 합니다. 자바는 이것을 인터페이스로 정하고, 리스너가 될 클래스는 그 인터페이스를 구현해야 합니다.
인터페이스는 메서드의 이름과 꼴만 적어 둔 약속이고, 구현은 그 메서드를 실제로 갖추는 것입니다(11강). onClick은 예시로 든 다른 이름입니다.
C#의 이벤트 처리
C#은 대리자에 처리기를 답니다
C#도 자바와 비슷합니다. 처리기는 이름이 자유롭지만 반환 값 없이 매개변수 둘을 받아야 합니다. 이벤트를 일으킨 객체(object)와 이벤트의 부가 정보(EventArgs)입니다. 이 처리기를 이벤트의 대리자(delegate)에 더하면 등록됩니다.
교재 예제입니다. 대리자는 부를 메서드를 담아 두는 객체, 라디오 버튼은 여럿 가운데 하나만 고르는 단추입니다.
13강 정리
일이 생기면 맡은 코드가 실행됩니다
예외 처리는 비정상적인 사건에, 이벤트 처리는 사용자의 동작에 응답합니다. 둘 다 일이 생기면 그것을 맡은 처리기가 실행되는 구조입니다.
다음 강의