안녕하세요? 도돌입니다~
이곳에도 오랫만에 글쓰네요. 이 게시판만 봐도 안드로이드를 시작하는 개발자가 부쩍 늘은 것을 느낌니다.
 종종 UI 작성시 eclipse에서 지원하는 wyswyg 방식의 에디터가 끔직하더라. xml 만들기 어렵다 라는 글을 종종 봐서 레잉아웃과 xml에 대한 이야기를 해볼까 합니다.
 Eclipse 내장 wyswig 방식의 ui 에디터는... 그냥 폼이잖아요... 그건 쓸 수 있는 물건이 아니니 페스~



언제나 앱을 만들면서 느낀건데 레이아웃 XML은 정말 안드로이드 개발에 있어 가까이 할 수 밖게 없지만 가장 답답한 놈이라고 생각합니다. 
(좀 더 정확하게는 레이아웃 xml + 이클립스 + 안드로이드 플러그인)
그래서 저는 처음 레이아웃 만들때 xml로 기본 뼈대를 만들어 두고 (딱 초기에 setContent 할 정도로만) 나머지는 그냥 프로그래밍으로 레이아웃 끝을 봅니다;;;
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT...
lp.weight = 1;
view.setLayoutParams(lp);
...addView..
요런것들;;; 지겹게 치죠 ㅋㅋ

레이아웃 XML이 멍청하다고 생각하는 이유는 다음과 같습니다.


1. 실제 자바 코드와의 연결이 약함
  자바 코드에서 R.id.main_layout 이라는 id 값을 썼을때 그곳을 클릭하여 따라가면 해당 id를 가진 XML 코드를 보여 주는 것이 아니라 R.java에서 지정된 id 값을 보여줍니다. String.xml은 조금 더 멍청한데 어떤 string 값이 실제 코드에서 사용중인지 확인 불가능하여 불필요한 string을 제거하기 어렵구요. 클릭하면 R.java로 가는건 당연 ㅠㅠ String.xml과 layout.xml의 연결은 아예 없다 싶이함..
 뿐만 아니라 findViewById로 없는 id를 찾도록 프로그래밍 되어 있을때 컴파일시 xml을 참조하여 해당 문제를 체크 못하고 실행하면 null point exception 가 나게 되지요. 코딩시 R.layout. 으로 검색하여 가능한 id 값들을 리스팅할때 (ctrl + space) 현재 엑티비티에서 사용되고 있는 R.layout의 id 들이 아닌 친절하게 layout에 있는 모든 xml의 id들을 리스팅 해주지요. 개발자 실수 한번 해보라고....

2. 연결도 약한데 코드와 xml 사이를 넘나들며 프로그래밍하려면 현기증남.
 나중에는 코드와 xml에 레이아웃 관련된 내용이 섞이게 되는데 두개 다 확인하면서 보려면 꼭 해매고 삽질하기 마련입니다.

3. 무지무지 더디고 답답한 적용 속도
 UI의 경우 빠른 결과물 확인과 실험이 필수 적인데 1번과 2번의 이유로 적용이 느려집니다. 코딩으로 하면 더 빠르고 짧게 쭉쭉 쓸 수 있죠~

4. 성의 없는 에러 메세지
 이클립스의 문제와 같이 가는 것 같은데 xml에서 나는 몇 문제들은 eclipse editor 화면이 아닌 Consol 에서만 문제점 파악이 가능한 경우도 있으며 종종(...자주)  제대로된 에러 메세지를 보여주지 못합니다.. 삽질하다 보면 혹은 뭐가 문제 있다고 프로젝트가 빨간색 x가 뜨는데 이상이 없어 보인다면 xml문제일 가능성이 높음! AndroidManifest.xml도 같은 종족이라는 것을 잊으면 안됨.
 가끔씩 잘못된 xml 파일 덕분에 그냥 R.java를 만들지 못해서 대부분의 소스 파일을 빨갛게 x를 쳐주는 강인함을 보이주기도 하죠...

5. 해당 레이아웃에 기능(animation이나 listener와 같은) 을 넣거나 유동적인 뷰를 구사하려면 어짜피 뷰를 불러 와서 많은 작업을 해야함.
 2.0 부터인가 onClick 와 같은 xml에도 연결해 쓸 수 있는 좋은 방법이 생기기도 했으나 역시 프로그래밍시 연결이 약해서 차라리 setOnclickListener(new OnClickListener...) 를 선택 하겠습니다.
 animation도 마찬가지. animation 도 리스너 달고 옴겨간 뒤에 레이아웃 변한 것 뒷처리 해주다보면 xml은... 한참 부족하죠. 이미 프로그래밍으로 레이아웃 다시 만드는 수준... 이렇게 되면 xml과 코드 사이에서 혼란이 생기고 열심히 xml 만든 보람이 사라지기도 하죠..

6. inflator를 이용하여 xml 레이아웃을 파싱해서 사용하면 왠지 더 느릴 것 같음;;
 ListView 시리즈... convertView 넣을 때도.. inflator가 뭔가요? 뭐든지 코딩~~ 그리고 그 작은 레이아웃을 위해 xml을 하나 더 만들 생각을 하다니..

7. XML 파일들 관리 귀찮음 (온갖 뷰마다 다 만들려면 ㄷㄷㄷ)

 파일 많아짐 = 관리 귀찮음


원래 1번만 쓸려고 했는데 계속 나오네요. 그만 써야겠어요 -ㅠ-
xml의 장점은 알고 있습니다. 가장 큰 장점은 프로그래밍 내용을 모르고도 누구나 레이아웃을 건들 수 있다는 것이 겠지요.
하지만 유지보수가 별 필요 없거나 다이나믹한 레이아웃을 사용했거나 프로그래밍을 실제 담당한 사람이 (개인 개발처럼) 계속 코드를 유지해간다면 xml의 중요성은 떨어지고 참 답답한 녀석이라는 생각을 들게 합니다.

xml에 대한 감정을 표출하다 보니 본의 아니게 글이 너무 길어 젔는데 다음 글은 xml 없이 신나게 논스톱으로 코딩하는 방법에 대해 적어 봐야겠습니다.
다른분의 xml 예찬론 글도 환영합니다~

개발자 화이팅!