뭐 대단한건 아니지만,...
제가 고급개발자는 아니지만,.. 그렇다고 초급개발자도 아닌 그 중간에 있다보니...
왠지 이런게 초급개발자와의 차이가 아닐까 싶다는 생각이 들어 글을 한 번 써봅니다. ^^;
private void setOnClick(){ OnClickListener onClick=new OnClickListener(){ @Override public void onClick(View v) { switch(v.getId()){ case R.id.btn_1: case R.id.btn_2: case R.id.text_1: case R.id.text_2: break; } } }; int[] clickView={ R.id.btn_1, R.id.btn_2, R.id.text_1, R.id.text_2, }; for(int i:clickView){ findViewById(i).setOnClickListener(onClick); } }
이 코드에서 알수 있는 것들
1. android 의 R 클래스에서 정의된 모든 id 값들은 static final int 형이다.
- 동일한 형태로 반복되는 코드는 int 값으로 for loop 를 돌릴 수 있다.
2. setOnClickListener 는 View 객체에서 정의된 것이다.
- 그러므로, ClickListener 를 달때는 굳이 파생된 다른 TextView, Button 등으로 형변환할 필요가 없다.
결론?
코드 몇 라인 정도는 줄일 줄 알아야 한다?
중급 개발자쯤 되면 슬슬 디자인 패턴도 쓸 줄 알고 구조적인 개발도 알아야겠죠...
설계나 태스크 산정도 할 줄 알아야하고..
이런 건 팀에서 정한 컨벤션 따라가면 되고요..
좀 더 큰 것을 볼 줄 알아야 랭귀지 제약 없이 개발을 넘나들 수 있겠다라는게 요새 생각입니다.
제목에 쓴 중급개발자의 범위가 너무 넓었던 것 같기도 하네요.. 안드로이드-어플리케이션 쪽에서도 한정된 영역의 중급개발자가 더 맞을 것 같네요.
그러고 보니 라인이 그닷 줄어드는 것도 아니네요. 어찌보면 코딩 스타일일수도 있는데,...
그것보다는... 습관처럼 copy-paste 해서,
TextView tv=(TextView)findViewById(R.id.text_1);
tv.setOnClickListener(onClick);
으로 사용하는 경우를 종종 보거든요. 그외의 작업(이를테면, setText 같은...)은 하지 않는데두요.
(그래서, 형변환하는 건 필요가 없다고 쓴거구요.)
그리고, id 값이 int 형이라는 걸 알고 코딩하는 것과 습관처럼 copy-paste 로 코딩하는건 좀 다르지 않을까 하는 생각이 드네요.

코드를 정말 줄일려면 xml에
<ImageButton
android:id="@+id/change_bt_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/prev_bt"
android:onClick="clickHandler"
/>
요런식으로 해놓고
그냥
private void clickHandler(View v)
{
switch(v.getId())
{
case R.id.change_bt_1:
break;
}
}
이렇게 하는게... 더 좋을거 같은데 ㅎㅎ;
코드와 디자인의 개념이라면 그럴수도 있다고 생각이 들지만,
조금 다른 의미도 있다고 봅니다.
저런 방식으로 사용이 가능한 경우가 디자인이라는 것이 그림만 그리는 영역에 국한되는 것이아니라,
하나의 동작. 즉 설계(디자인)까지 겸할 수 있을때 이득이 되는 경우가 많아 보였습니다.
개발자와 디자이너의 관계로 보는 거죠. 컨버전스가 가능하다고 보는 것 같다는 생각이 들었습니다.
개발자는 범용적인 기능을 가진 부품을 만들고, 디자이너는 그 부품을 자신의 디자인에 맞춰 조립한다 라는 개념으로 이해했었습니다.
물론 , 기본 철학이나 국내의 개발현실에서는 부러우면서도 이해하기 힘든 부분이기도 하다고 생각합니다..ㅡ.ㅜ
제 생각에는 코드 편집 자동화 툴 때문에 있는 기능인 것 같습니다.
자동 코드 생성기를 만든다거나 하면(예전 PC MFC의 ClassWizard 같은 툴) 이 방식이 구현하기 훨씬 편하겠지요. 생성된 후에 편집도 고려해야 하니까요.
혹은 손으로 XML레이아웃 편집중 Button치고 onClick까지 치는 순간 작은 팝업으로 <Add New Handler>나오고 요걸 눌렀을 때 연관 코드에 onClick코드 stub이 만들어지고 아니면 이미 onClick코드가 있다면 그 코드 영역으로 점프하는 기능을 갖는 툴을 만든다 하면요. (혹시 지금도 있나??)
저도
findViewById(R.id.btn_1).setOnClickListener(onClick);
findViewById(R.id.btn_2).setOnClickListener(onClick);
findViewById(R.id.text_1).setOnClickListener(onClick);
findViewById(R.id.text_2).setOnClickListener(onClick);
이게 더 땡기네요 ^^.. 루프문이 공통된 작업처리에 이점을 가지는 것처럼 보이기도 하지만 해당 루프문의 n이 증가할 수록 22번째 라인에서 발생하게 될 오류에 대해 디버깅이 귀찮아지지 않을까요?? 예를 들어 NullPointerException이라든지 말이죠.. 뭐 그렇다구요 ㅋ
onclick 보단 ..이미지같은 배열할때만 씀.. onclick은 위에말씀하신xml 에 onclick 으로걸고 네이밍을 on~~~clicked 로해서 씀..하긴머든익숙한게 좋다는
오히려, XML을 이용한 방법이 더 단순하고 효과적으로 보입니다.
처음 스트러츠나 스프링이 나왔을때도 개발자들이 코드와 메타 데이터를 모두 봐야 해서 가독성이 좋지 못하다고 주장하는 분들이 많았지만, 지금은 어떤가요?
결국에는 개인차가 있는 소스코드보다는 제공되는 메타 데이터가 더 효과적인것 같습니다.
취향의 문제를 개발 Grade 의 문제로 잘 못 생각하신것 같습니다.
\
아이폰 프로그래밍 하다가 안드로이드로 넘어온 한 개발자 입니다.
XML이라는거 참 불편하더군요...(개인적인 생각....)
아이폰 개발할 때도 인터페이스 빌더쪽으로는 눈도 않돌리고 모두 코드로 작성해서 했었습니다....
안드로이드 같은경우에 XML을 사용하지 않고는 도저히 힘들더라구요....
최대한 XMl 사용하지 않으려고하고 방법을 찾는중이지만.... 찾은 자료 대부분이 XML을 사용한다는....ㅠㅠ
id나 기타등등의 셋팅을 코드로 할 수 있으면 좋으련만.... 제가 아직 못찾은 것일 수도 있겠네요....
개인적으론 .
findViewById(R.id.btn_1).setOnClickListener(onClick);
findViewById(R.id.btn_2).setOnClickListener(onClick);
findViewById(R.id.text_1).setOnClickListener(onClick);
findViewById(R.id.text_2).setOnClickListener(onClick);
이게 더 땡기네요 ..^^;