인터페이스 빌더 없이 하는 아이폰 리얼 프로그래밍


사용자 삽입 이미지

인터페이스 빌더 없이 하는 아이폰 리얼 프로그래밍
박지성, 최경화 지음 | 모바일 프로그래밍 시리즈
488쪽 | 30,000원 | ISBN 9788960772472 | 2011년 11월 22일 출간
YES24, 교보문고, 인터파크, 강컴, 알라딘, 반디앤루니스, 대교리브로

어느덧 아이폰이 우리나라에서 공식 출시된 지 지난 11월 말로 만 2년이 지났습니다. 아이폰이 국내 출시된 이후로 우리나라에는 천지개벽할 정도는 아니어도 참 많은 변화가 일어났습니다. 이는 전 세계 동시대적으로 일어난 사건은 아니었고, IT 강국이라 불리우는 나라로서는 사실 많이 뒤늦은 경험이었지요.

아이폰이라는 애플의 모바일 기기가 불러온 것 중 하나는 앱스토어를 통한 애플리케이션 개발과 출시를 들 수 있겠습니다. 기업이든 개인이든 누구나 애플 개발자 프로그램에 등록하고 만든 앱을 자유롭게 올림으로써 스스로 퍼블리셔의 역할까지 할 수 있게 된 것이죠. 물론 한편에서는 극단의 폐쇄성이라고 일컬어지는 애플이라는 큰 울타리 안에서 가능한 일이었지만 말입니다.

맥 컴퓨터, 오브젝티브C, 아이폰OS SDK 등 당시만 해도 흔히 접하기도 갖추기도 어려운 이런 낯선 환경 속에서도 애플의 아이폰 개발에 관한 열기가 뜨거울 수밖에 없었던 것은 어쩌면 애플에서 제공하는 엑스코드(Xcode)와 인터페이스 빌더(Interface Builder)라는 마당이 잘 갖춰졌기 때문인지도 모릅니다.

아이폰 SDK 베타 2 버전부터 제공된 아이폰용 인터페이스 빌더는 GUI도구를 써서 애플리케이션의 UI를 쉽게 제작할 수 있는 아주 유용한 툴입니다. 윈도우와 뷰, 뷰를 구성하는 요소를 배치하고 속성을 손쉽게 편집하는 기능을 제공하죠. 인터페이스 빌더의 역사는 1980년대 후반 넥스트스텝(NextSTEP) 시절로부터 거슬러 올라갑니다. 위키피디어에 따르면 팀 버너스 리가 넥스트 워크스테이션을 이용해 월드와이드웹을 개발할 때 쓰인 툴 중 하나가 바로 인터페이스 빌더였다고 하지요. 모두가 잘 아시다시피 인터페이스 빌더는 엑스코드4가 출시되면서 통합됐습니다.

손쉬운 인터페이스 빌더, 그러나 코드의 라이프사이클은? 유지보수는?

1990년대 후반에서 2000년대 초반 인터넷 붐과 함께 웹사이트 제작이 열풍이었습니다. 드림위버, 나모웹에디터, 손쉽게 메뉴를 딸깍딸깍 누르는 것만으로도 홈페이지를 뚝딱뚝딱 만드는 기능을 제공하면서 너도나도 홈페이지를 만들어 사이버 집을 꾸리는 게 유행이었죠. 지금 생각하면 얼마 되지 않은 시기인데 마치 강산은 열 번은 변한 느낌이 드네요.

이렇듯 간단한 웹 제작 도구로 만든 사이트, 막상 코드를 열어 유지보수를 하려 하면 골칫덩어리 자체였습니다. 유지보수는커녕 코드를 해석하기도 힘들고, 어디서부터 어디까지 손을 대야 할지 모를 정도였죠. 물론 지금은 어도비는 드림위버만으로도 웹표준은 물론 향후 HTML5까지도 완벽히 대응할 수 있는 툴로 널리 활용시키겠다는 포부가 크다는 이야기도 들립니다.

이것이 개인 프로젝트가 아닌 기업 프로젝트라면 이야기는 달라집니다. 기업 홈페이지나 모바일 애플리케이션은 많은 인원의 협업도 일어나며 담당자 교체도 수시로 일어납니다. 소스코드의 라이프사이클도 짧지 않으며, 주석만으로도 코드의 정체성과 역할을 충분히 전달해야 합니다. 한눈에 파악해서 언제 어디서나 누가 수정을 하고 향후 개선작업을 하더라도 손쉽게 작업할 수 있어야 합니다.

견고한 클린 코드, 유용한 레거시 관리를 위하여
이제는 인터페이스 빌더에 대한 의존도를 낮춰야 한다!


그야말로 아이폰 애플리케이션 개발의 유용한 레거시 관리를 위해 이젠 과감히 인터페이스 빌더를 버려야 한다고 이 책의 저자들은 이야기 합니다.

잠시 저자의 말을 들어볼까요.

아이폰 개발은 맥에서 엑스코드(Xcode)로 개발하는데, 화면을 구성하는 인터페이스 빌더라는 개발 툴을 제공합니다. 인터페이스 빌더를 이용하면 개발이 좀 더 쉬워집니다. 각 객체에 대해 필요한 델리게이트나 뷰 템플릿 등을 제공해주므로 코딩 시간도 줄고, 객체의 다양한 속성도 속성 창에서 손쉽게 찾아 설정하고, 좌표를 일일이 계산하지 않아도 되죠. 하지만 2인 이상이 개발을 진행하는 협업 프로젝트에서는 인터페이스 빌더라는 툴이 오히려 방해가 되기도 합니다.

가장 큰 단점은 개발 소스의 가독성이 떨어진다는 점입니다. 유지 보수 측면에서 소스의 가독성이 떨어진다는 점은 치명적일 수밖에 없는 노릇이지요. 때문에 중대형 프로젝트에서는 인터페이스 빌더의 사용을 지양하고 일명 막코딩으로 구현하기를 권장합니다.

실례로 모 대기업의 애플리케이션을 개발할 당시 초기에는 인터페이스 빌더를 이용해 모든 화면을 구성했습니다. 하지만 초기에 기획하지 않았던 가로 모드에 대한 스펙이 추가되면서 문제가 드러나기 시작했습니다. 가로모드에 대한 부분을 고려하지 않고 개발했기 때문에 해당 스펙을 추가하기란 불가능했습니다. 때문에 무리를 해서라도 xib(인터페이스 빌더를 이용해 개발한 파일)를 모두 들어내고 코딩만으로 화면을 다시 개발했습니다. 결과적으로는 무진장 힘들었고 일정에 지연이 조금 있었지만, 이후 클라이언트의 새로운 요건을 수용하거나 유지 보수 측면에서는 아주 탁월한 선택이었습니다. 해당 기업에서는 저희들의 개발 방법론을 가이드로 작성해 이후 개발을 진행하는 업체들에 배포해 인터페이스 빌더 사용을 초기부터 배제합니다.

거의 모든 책과 예제들이 이 인터페이스 빌더를 이용한 개발 방법을 제시하고 설명합니다. 하지만 이 책에서는 인터페이스 빌더를 전혀 다루지 않습니다. 인터페이스 빌더를 이용해 개발하는 방법이 잘못된 방법이라고 말하고 싶지는 않습니다. 다만 코드만 보고 프로그램의 라이프 사이클을 읽을 수 없고 인터페이스 빌더를 왔다 갔다 해야 해서 여간 불편한 것이 아닙니다. 주석을 남길 수도 없지요.

우리는 유지 보수를 위해 담당자들에게 인수인계라는 어렵고도 귀찮은 작업을 해야만 하기에 알아보기 쉽게 코딩을 해야만 하는 의무가 있습니다. 최대한 많은 주석을 작성해 소스에 대한 가독성을 높여 프로그램에 대한 이해도를 높이는 것이 바람직하다 할 수 있습니다. 때문에 가능하다면 인터페이스 빌더를 이용하지 않고 개발을 진행해 많은 주석을 남겨야 할 필요가 있는 것이죠.

- 대표저자 박지성 / 저자의 말 중에서

이만하면 이 책의 집필 의도는 충분히 전달되지 않았을까 싶습니다. 인터페이스 빌더는 충분히 유용한 개발도구이며, 예쁜 UI를 매우 빠르고 손쉽게 만드는 데는 더할 나위없는 도구입니다. 그러나 장기적인 안목으로 개발해야 하는 프로젝트가 있을 때는 인터페이스 빌더 없이 개발하는 방법도 반드시 알아야 합니다. 사수가 화살이 떨어지면 근처에 있는 나무라도 깎아 촉을 세우고 사냥을 해야 하지 않겠습니까. 연필 깎는 법은 모르고 매번 자동연필깎이에 연필을 깎아 쓴다면 정작 칼만 쥐어졌을 때는 손에 피가 나기 마련일 테니까요.

좀 더 쉬운 이해를 위해 한 가지 예를 들어보겠습니다.
아이폰 개발자라면 모두들 잘 아실 아주 초보적인 내용입니다.
저희 책 p43에 나오는 예제로서 3가지 뷰를 상하위 뷰로 나눠, 빨강, 파랑, 까망 오브젝트의 순서로 배열하는 코드를 설명합니다. 우선 결과물을 먼저 보시죠.

사용자 삽입 이미지

이를 인터페이스 빌더로 구현하는 그림은 아마 낯익으실 겁니다. 일단 우측하단의 Objects에서 UIView를 끌어다 화면에 올려놓고, 다음그림과 같이 우측상단의 네 번째 탭을 선택해 색상을 변경한 다음,
사용자 삽입 이미지

우측 상단의 다섯 번째 탭을 선택해 좌표와 크기를 미세하게 조정합니다.
사용자 삽입 이미지

말하자면, 이렇게 기존의 아이폰 애플리케이션 책이 인터페이스 빌더를 위주로 앱 개발 과정을 천편일률적으로 설명하는 반면, 우리 책에서는 3가지 UIView와 addSubView를 이용해 직접 하드코딩 하는 과정을 설명해드립니다. 책에서는 예제 2-1(43쪽)과 같이 코드만 보여드리지만 실제로 여러분이 엑스코드 환경에서 작업하는 그림은 다음과 같을 것입니다. 좀 머리가 아프신가요? ^^ 선택은 여러분의 몫입니다.

사용자 삽입 이미지


궁극의 아이폰 애플리케이션 하드코딩을 위한 입문서


이 책은 아이폰 애플리케이션 초급자가 덥썩 시작할 책은 아닐 수도 있습니다. 어느 정도 개발에 대한 개념이 잡힌 중급 개발자, 혹은 기초부터 차근차근 공부하고 싶은 개념찬 초급 개발자라면 쉽게 읽을 수 있도록 저자 두분은 상세한 길을 안내합니다. 박지성, 최경화 두 저자분은 실무에서 유수한 기업 애플리케이션을 개발한 분들로서 특히 박지성 님은 현대카드 애플리케이션의 핵심 로직을 개발한 분이기도 합니다. 또한 이 책의 전체적인 기획을 총괄한 (주)토리( www.toree.co.kr 대표:서상열)는 스마트 애플리케이션 서비스를 전문으로 개발하는 기업으로서, 여러 기업 고객과 솔루션을 개발하며 교육 사업도 펼치고 있습니다.

실전 현업 개발자들이 자신들의 경험을 담아 이야기하는 아이폰 애플리케이션 개발의 정석, 여러분도 이 책에서 느껴보시기를 바랍니다. 이 책은 이미 11월 말에 출간된 책으로서 YES24, 교보문고, 인터파크, 강컴, 알라딘, 반디앤루니스, 대교리브로를 비롯한 인터넷 서점이나 오프라인 서점에서 언제든지 바로 구매하실 수 있습니다. :)

여러분 모두 어떤 환경에서도 흔들리지 않는 견고한 코드의 달인으로서, 기초부터 탄탄한 실력을 갖춘 아이폰 개발자가 되시길 바랍니다!
 

CC

크리에이티브 커먼즈 라이센스 에이콘출판사에 의해 창작된 이 저작물크리에이티브 커먼즈 코리아 저작자표시 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.


  • petershine| Dec 02, 2011

    (내용을 읽지 않고, 별도의 프로그래밍 관련 주제의 댓글입니다. 소개글만 읽고 적은 것이므로. 책에 대한 평가로 오해하지 말아주세요.)

    좋은 책이 나온 것 같습니다. 인터페이스 빌더'만' 쓸 줄 아시는 분들에게 무척이나 유용하고 의미있는 내용을 가지고 있을 것이라 생각됩니다.

    정교하고 디테일한, 100% 통제를 해서 모든 요소들을 일일이 다 챙기는 것이 중요한 프로젝트라면 당연히 코딩으로 VIEW 또한 손수 다 그리는 것이 좋을 수 있습니다.
    또한, .xib 은 일종의 XML 로서 parsing 과정을 거쳐야 하기 때문에, 0.001 초라도 아껴야하는 경우에는 분명 사용하지 않는 것이 맞습니다.

    하지만, MVC 분리법에 대한 충분한 이해가 되지 않은 초보 개발자, 실제로 응용해본 경험이 적고, 그 가치를 제대로 이해하지 못한 개발자들에게는 잘못하면, VIEW-CONTROL-MODEL 에 속하는 코드들이 우후죽순 막 섞히는 결과물을 내게 만들기도 합니다. 마감날짜가 급한 경우에는 더더욱 유지보수에 문제가 있는 (앞으로 문제가 생길) '위험한 코드'를 만들게 되지요.

    이렇게 되면 소개글에 나타난 대로 유지보수에 탁월한 해결책이 되어주지 못하게 됩니다.

    분명 하드코딩은 중요하고, 어떤 개발환경도 반드시 이것을 가능케 해야 합니다. 하지만, 이것은 과거의 생산물이 가진 생명력을 연장하는데 좋은 것이지, 미래를 위한 혁신적인 결과물을 만드는데 장애가 되는 것이라 생각합니다.

    그래서, 혹시라도 미래를 위해서 일해야할 초보 개발자들에게 잘못된 습관을 가지게 하거나 자칫 혼란을 주지 않을까 하네요. 컴퓨터가 할 수 있고, 컴퓨터가 해주는 것이 훨씬 더 좋은 일인데도 불구하고, 단지 자기는 이렇게 가르침 받았고, 이렇게 하고 싶다는 이유만으로 하드 코딩을 고집하는 것은 미래에 대한 좋은 준비자세가 아니라고 생각합니다.

    또한 단지 코멘트를 많이 남기기 위해서도 좋은 이유라고 생각되지 않네요. 코멘트 대신에 코드 그 자체로 모든 내용을 표현할 수 있다면 제일 좋다고 많은 분들이 얘기하시는 것 같던데.

    반대로, 인터페이스 빌더를 쓰면 그에 대한 설명을 구구절절 코멘트로 어딘가게 남겨둬야 하니, 아예 코멘트 없이 코딩을 하기 위해서라도 하드코딩을 하는게 좋다고 하려 하신 거라면, 적극 동감할 수는 있습니다.

    책의 내용은 분명 추정컨데 회사내 베테랑 개발자들에게 무척이나 도움이 되겠지만, 책없이 공부할 줄 아시는 그분들에게 정작 책이 필요하지 않을 것도 같고요. 왜 그동안 이것을 공개적으로 다룬 책이 씌여지지 않았을 지 좀더 냉정한 고민을 하셨기를 바랍니다.

    당연히 그런 고민을 하셨다면, 어떻게 하면, 인터페이스 빌더의 장점과 하드코딩의 장점을 융합해서 양쪽 모두가 가진 탁월함을 같이 쓸 수 있는 방법도 책에 써주셨을 거라 믿습니다.

    이런 목적으로 두마리 토끼를 다 잡는데 유용한 내용을 쓰셨다면, 이런 책이 다른 곳도 아닌 한국에서 한글로 먼저 출간된 것에 엄청난 자부심을 느끼셔도 좋을 것 같습니다.

  • 에이콘| Dec 02, 2011

    안녕하세요. petershine 독자님. 장문의 글 남겨주셔서 감사합니다.

    책을 아직 보지 못하셨다고 하니 우선 궁금하신 부분에 대한 답변부터 말씀 드리면, 죄송스럽게도 이 책의 내용은 하드코딩과 인터페이스 빌더의 적절한 활용을 융합한 책은 아닙니다. 저자분들은 인터페이스 빌더를 가급적 배제하고 하드코딩으로 디자인한 분들과 일했을 때 훨씬 결과물과 개발과정의 작업 효율성이 높아짐을 확신하고 이 책의 집필을 기획하셨습니다. 물론, 이에 대해서는 순전히 저자분들의 의견일 수 있겠지요.

    어떤 목적지에 도달하고자 할 때는 단 한 가지 길만 있는 것은 아니라고 생각합니다. 그리고 모든 사람이 같은 방법으로 사고하고 똑같이 행동하는 것도 아닐 테고요. 블로그 글 중반부에 적었듯이, 이 책은 반드시 인터페이스 빌더를 버려야 한다,도 아니며 반드시 하드코딩만이 유일한 방법이라고 강요하는 책은 아닙니다.

    그리고 아이폰 애플리케이션 개발 분야에 한정하지 않고도, 현업에서 기본기가 제대로 갖춰지지 않은 초보 개발자에게 무작정 한 가지 방법만 강요한다면 좋은 결과가 나오지 않는다는 것, 혹은 '아니 한만 못하다'라는 것은 지당한 말씀이라고 생각합니다.

    하지만 이 책은 기존 개발방법에 안주한 분들에게 한 번쯤 다른 방식으로 사고하는 새로운 방법을 제시하는 책이라고 보아주시면 감사하겠습니다.

    세상에는 참 수많은 책이 있습니다. 또한 책 없이도 얼마든지 너끈하게 방법을 익히는 법도, 또한 그런 훌륭한 개발자 분들도 많습니다. 책을 기획하는 이로서 많이 느끼는 점은, 책은 평소 책을 본 분들이 꾸준히 사본다는 생각을 많이 해왔습니다. 외국에서는 기획되지 않았더라도 우리나라에서 독특하게 개발한 방법이나 이론, 개념 등을 소개한 책도 적지 않습니다. 반드시 외국에서 출간된 적이 없다고 해서 그 방법이 틀린 방법이라고는 생각지 않습니다. 저희도 이 기획이 독자여러분들에게 많은 가능성을 열어준다는 점을 높이 샀습니다. 선택은 개발자 여러분 본인의 몫이라는 점을 저도 블로그에서 분명히 명시했고요.

    물론 비교할 대상은 조금 다르지만, 저희로서는 그간 플렉스, 토비의 스프링에 관한 새로운 접근 방법, 클라우드 컴퓨팅 서적 등 일반적인 개발도서 들의 기획 방향과 궤를 달리하는, 또는 세계에서 거의 최초로 기획 출간하는 서적들로도 충분히 우리나라 독자들에게 어필할 수 있음을 확인했습니다.

    아무쪼록 이번 책 이후에는 말씀하신 대로 인터페이스 빌더와 하드코딩을 융합하는 새로운 방법론을 제시할 수 있는 또 다른 서적이 기획될 수 있으리라 믿습니다.

    훌륭한 고견에 깊이 감사합니다. 저는 에이콘출판사에서 출간기획을 맡은 김희정이라고 합니다. 고맙습니다.

  • petershine| Dec 02, 2011

    이렇게 신경써서 좋은 답 주셔서 감사합니다.
    오히려 책을 직접 읽고서, 저자들께서 전수해주고자 하는 하드코딩의 탁월함을 배워 보아야 겠네요. 쭉 읽고나면 저자들분의 좋은 뜻을 알 수 있을 것 같습니다.

    참고로, 저는 에이콘 책을 좋아하는 블로그 애독자구요 (그래서 1착으로 코멘트를 쓸 수 있었죠 ^^) 앞으로도 좋은 책 많이 내셔서, 그래서 오히려 외국에서 번역해 가는 일들이 많이 생기길 바래요.

  • 에이콘| Dec 02, 2011

    저희가 책을 발굴해서 내는 이유도, 다양한 분야의 독자(개발자)분들께 다양한 시각을 제시해드리기 위함이라는 점이라고 봤을 때는 petershine 님께서 저희에게 주신 의견도 딱히 틀린 것은 아니지요.

    아무튼 저는 더 다양한 분야에 더 다양한 수준의 도서가 많이 출간되고, 또 그렇게 도서 시장이 풍성해지고 개발자분들의 시각도 더 넓어지면 좋겠습니다.

    한번 읽어보신 후에 또 다른 의견을 받게 되길 바라겠습니다. 고맙습니다. 앞으로 저희와 일하게 되실 날도 기대할게요. :)

  • 레몬에이드| Dec 08, 2011

    인터페이스 자동화 툴의 대표적인 단점 두가지가 불필요한 코드 생산으로 코드 가독성 저하, 자동화로 인해서 원리를 모르고 프로그램을 작성하게 만들 수 있다는 것!

    그 두가지 문제에 비추어 볼 때 좋은 접근 방법 인것 같습니다 ^^
    좋은 책으로 나와 많은 분들께 도움이 되면 좋겠네요!

  • 에이콘출판사| Dec 08, 2011

    여러분의 따스한 관심이 에이콘의 큰 힘이 됩니다. 레몬에이드님, 감사합니다.