안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요~!
리스너를 공부하고 있는 초보입니다
책을 보던중
anonymous nested class 선언부에.....
-------------------------------------------------------------------------------------------------------
Button.OnClickListener mClickListener = new View.OnClickListener()
----------------------------------------------------------------------------------
이런식으로 선언되어 있는 것을 보았습니다
이는 다운캐스팅이 아닌가요?
그런데 다운캐스팅이라면 형을 꼭 명시해 줘야 하는 것으로 알고있습니다.
덕분에 지금 무지헷갈리는데요.. 혹 제가 다운캐스팅 / 업캐스팅 을 반대로 알고있는건가 해서요 업캐스팅이라 형 명시가 안되어 있는 것인지.. 혹은 업/다운캐스팅 문제가 아닌 다른 형태인지.. 궁금합니다..ㅠ_ㅠ
고수님들 답변부탁드립니다~!! 감사합니다!!!!




OnClickListener()는 인터페이스입니다. View클래스에 이너클래스형태로 정의되있고요..
Button은 View는 상속관계이고 두 객체타입 자체는 다운캐스팅 업캐스팅이 구분되지만(예를들어 Button a /= new View(), View b = new Button)
, View안의 이너클래스를 그대로 상속받은 Button의 경우 OnClickListener 클래스 및 mClickListener(View안에 정의된 OnClickListener를 가리키는 인스턴스입니다.)를 모두 가지고 있기에 문제가 되지 않습니다. 제 내공이 적어 이정도밖에 답변을 못 드리네요.
좀 다른얘기지만, 이런 이론적인 부분이랄까에 너무 치우치시면 시간적으로 손실이 크실 것 같네요. 우리가 수학문제를 풀 때 근의 공식을 외워서 풀듯이, 많은 코딩을 하시다 보면 몸에 익히실 수 있는 부분입니다. 딱히 설명은 못해도 이게 문제가 있는건지 아닌지 느낌이 온다죠 ^^.. 하지만 본인이 이런 기초적인 부분을 확실히 쌓으고 싶으시다 하시면, 자바 디자인패턴(리스너 같은경우는 대표적인 패턴인 옵저버로 되어있죠..) 서적을 구입해 공부하시면 크게 도움이 되실거구요.