class Button
자 버튼 클래스가 있어
그리고 이 버튼 객체를 메인 클래스가 가지고 있다 치자
class Main
{
Button button
}
우리가 하고 싶은 것은?
메인에 있는 이 버튼이 눌린 그 순간, 메인에서 뭔가 처리를 시켜주고 싶어!
이거야
이럴 때 쓰는 게 바로 리스너야
그래서 버튼이 눌리면 버튼이 눌렸다는 콜백함수를 받는 거지
콜백함수가 말이 어려우면 이벤트라고 생각해
왜 굳이 이렇게 하냐?
디커플링을 위해서야
버튼은 온전히 버튼의 역할만 하는 거지
메인의 기능까지 넣을 필요는 없자나?
만약에 버튼이 말이야
메인에만 있는게 아니고 여러군데 있으면
그 기능을 전부다 버튼 쪽에 구현해야되거든
그럴 수는 없잖아
그래서 버튼에다가 버튼 전용 인터페이스(리스너)를 등록하는 일을 하는 거야
button.addListener(this)
헐 근데 this를 하면 main 클래스 자체가 들어가겠지?
이렇게 구현 해버리면 커플링되잖아?
왜냐 메인은 그냥 메인 클래스지, 리스너가 아니야
그래서 필요한거시 인터페이스 상속이다
// 메인이 버튼리스너를 상속받음
class Main implements ButtonListener
{
}
interface ButtonListener
{
void onClick();
}
자 말 그대로의 버튼을 청취할 수 있는 인터페이스 기능을 main이 가지게 된 거야
버튼이 눌리게 되면 저 onClick 함수가 호출되는 거지!
이러면
button.addListener(this)
이렇게 메인 클래스를 인터페이스로서 넘기는 게 가능해짐
이제 버튼 쪽에서 저 인터페이스 함수를 호출하면?
class main : ButtonListner
{
// 인터페이스로 구현된 함수
public void onClick()
{
}
}
main 쪽에 있는 이 onClick 함수가 호출되는 것임 ㅇㅇ
이런걸 이벤트 기반 프로그래밍이라고 함니다
와 정말 감사합니다 - dc App
이해 잘 됐어요 감사해요 - dc App