btn.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { } });
상단의 소스코드에 대해서 자세한 설명 부탁드리겠습니다.
setOnClickListener 를 등록하고 파라메터로 들어오는것이
또다른 객체생성입니까?
onClickListener() 메소드는 인터페이스인것으로 알고 있지만 객체화가 안되기 때문에 저렇게 코딩을 하는것인지요?
그동안 리스너를 등록할때 생각없이 저런 유형으로 계속해서 사용 했지만
구문을 잘 분석할라니까 저도 잘 모르겠습니다.
뭐 비유하자면
자동차 엔진이어가 자동차가 어떻게 굴러가는지도 모르면서 운전만하는 격인것 같아요 ㅜㅜ
도와주세요~~
책에서 발췌된 부분을 올립니다;;
--------------------------
리스너(Listener)는 특정 이벤트를 처리하는 인터페이스이다. 이름 그대로 이벤트 발생 여부에 귀를 쫑긋 기울이고 있는 객체라고 할 수 있다. 리스너에 대응되는 이벤트를 받는 단 하나의 메서드가 선언되어 있으며 모두 View 클래스의 이너 인터페이스로 선언되어 있다. View 클래스의 내부 인터페이스로 OnCilckListener 인터페이스가 선언되고 있고 이 인터페이스는 onCLick라는 추상 메서드를 포함한다. 이 메서드를 이벤트 핸들러라고 부른다. 각 인터페이스에는 이벤트를 처리하는 추상메서드가 딱 하나씩만 선언되어 있고 구현은 없다. 인터페이스는 어디까지나 메서드의 껍데기만을 가진 선언체일 뿐이므로 그 자체가 이벤트를 받을 수는 없다. 다만 특정 이벤트를 처리하는 핸들러의 원형이 어떠해야 한다는 것을 강제할 뿐이다.
이벤트를 처리하려면 리스너를 구현하는 클래스를 선언하고 그 객체를 생성해야 한다. 클래스가 되려면 리스너의 추상 매서드인 핸들러를 구체적으로 구현해야 한다. 이렇게 구현된 객체를 리스너 객체라고 한다. 리스너를 구현한 다음에는 뷰에 이벤트가 발생핬을 떄 핸들러가 호출되도록 연결해야 한다. 구현만 해 놓는다고 해서 이벤트와 리스너가 자동으로 연결되는 것은 아니므로 어떤 리스너가 어떤 이벤트를 처리한다는 것을 등록해야한다. 등록 메서드는 리스너별로 따로 준비되어 있다.(set+리스너 등등)
------------------------
책 발췌부분인데 올리지 말아야할 부분이라면 지우겠습니다~
도움이 될지 모르겠습니다.
저는 그냥 익명클래스라고 이해하니까 모든 실타래가 풀리더군요.
성의없는 답변에 죄송합니다.
퇴근 시간이 임박해서...