생각해볼만한 논점

Click 이벤트를 구현하는 방법에는 크게 두가지가 있습니다.

implements OnClickListener를 사용해서 onClick()메소드를 override해서 구현하는 방법과, 
new OnClickListener()를 사용해서 리스너 객체를 생성해서 구현하는 방법입니다.

이 포스트는 같은 기능을 하도록 구현했을 때, 
두가지 방법 중 어떤 것이 가독성이 쉽고, 코드가 짧아 질 수 있는지를 비교해 본 결과입니다.


아래는 같은 기능을 하도록 구현된 각각의 코드입니다.



 Click 이벤트의 구현

implements OnClickListener

new OnClickListener()




 

 
 

 


위의 두 코드는 모두 위의 스크린 샷처럼 차이없이 동작합니다.
그렇다면 어떤 방법을 사용하는게 좋은 것일까요?






 나름대로의 결론

제 개인적으로 내린 결론은 코드의 확장과 코드의 간결성, 가독성등을 고려하여,
implements 키워드를 통해서 onClick() 메소드를 override 구현하는 방법을 선택하였습니다.

버튼에 대한 이벤트들이 확실하게 onClick() 메소드 안에 모여있는것을 안다면, 제가 아닌 다른 사람들이 코드를 수정할 경우에도 손쉽게 코드를 수정/보완 할 수 있기때문입니다.

또한 코드의 가독성도 높아지고, 코드도 간결해집니다.

개발자마다 편하게 사용하는 방법이 있겠지만, 저의 경우엔 메소드를 구현하는 방법이 여러모로 괜찮다고 생각합니다.






Posted by croute

댓글을 달아 주세요

  1. BlogIcon Yearnning 2012.01.26 21:10  댓글주소  수정/삭제  댓글쓰기

    감사합니다!

  2. 공부중 2013.05.31 18:11  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 ~! 질문이 한가지 있습니다 ~!

    위에 onclicklistener에서 View의 getID()를 이용해서 아이디를 받아오잖아요

    혹시 ListView의 예제에서 getItemAtPosition 처럼 클릭했을 때 입력된 내용을 받아오게 할 수 있나요??

    • Favicon of https://croute.me BlogIcon croute 2013.05.31 19:02 신고  댓글주소  수정/삭제

      그런 경우에는 보통 VIew 에 setTag 메소드를 이용해서 데이터를 보관합니다.
      해당 View 가 클릭된 경우 onClick(View v) 메소드가 호출되므로,
      v.getTag() 를 통해서 데이터를 가져오고 casting 해주면 되죠.

  3. 공부중 2013.06.02 11:36  댓글주소  수정/삭제  댓글쓰기

    감사합니다 ~! 그런데 제가 달력에 날짜를 클릭해서 일정관리를 하는 프로그램을 만들어보고 있는데 그리드뷰 예제에서 알려주신대로 gridview 부분에 onitemclicklistener 을 달아서 클릭된 날짜를 받아오려고도 해보고 convertview부분에서 onclicklistener의 v.getTag로 받아오려고 설정을해서 실행을 해보면 달력 날짜부분을 클릭했을 때 어플이 죽어버리네요 getID를 받아올땐 됬는데 .. 왜그런걸까요 ??

  4. BlogIcon 야호 2014.02.06 10:51  댓글주소  수정/삭제  댓글쓰기

    좋은 글 감사합니다.
    두가지 중에서 저는 new OnClickListener() 로 사용했는데, 버튼을 많이 사용할 땐 아무래도 전자의 방법으로 사용하는게 더 보기도 쉽고 편리할 것 같네요. 좋은 거 알아갑니다 ^^

  5. Favicon of https://action713.tistory.com BlogIcon 예쁜꽃이피었으면 2015.05.04 16:17 신고  댓글주소  수정/삭제  댓글쓰기

    switch문은 implements OnClickListener 여기에서만 쓸 수 있는 건가요?

    • Favicon of https://croute.me BlogIcon croute 2015.05.05 01:36 신고  댓글주소  수정/삭제

      new OnClickListener() ... 로 setOnClickListener 에 세팅하셨다면, 각각 세팅된 리스너가 다를테니 switch-case 문을 사용해도 사실 의미가 없겠죠.

      View.OnClickListener listener = new View.OnClickListener() ... ;
      이런식으로 생성해 해두시고,
      각 뷰마다 이 listener 로 setOnClickListener 를 호출한다면 switch 문을 쓸 수 있습니다만.. 음..

  6. Favicon of https://action713.tistory.com BlogIcon 예쁜꽃이피었으면 2015.05.06 09:31 신고  댓글주소  수정/삭제  댓글쓰기

    아 감사합니다; 공부하겠습니다.