꿈꾸는 엘프

 살아질 것인가. 살아갈 것인가.
이글루스 | 로그인
메뉴릿
카테고리
전체
Essay(내글)
Money(재테크)
Books(감상)
Books(추천도서)


WoodWork(목공 이야기)
Life Style(라이프스타일)


TokTokLab(모바일개발)
Transpedia(통번역)


I Want it(갖고 싶은 것들)
Like it (즐겨쓰는 모든것)
Go ! (즐겨찾기)
미분류
Profile

現톡톡랩 대표
前트랜스피디아 대표
前아침데이타시스템 과장(금융리스크 관리 컨설팅 및 개발)
前SK커뮤니케이션즈 메신저 개발팀 대리(NateOn3.7/4.0/Global Version개발)
前마켓포인트 신제품(전문가용실시간금융정보시스템) 개발 TF팀
박백민의 증권분석
Sugar Candy Mountain Lab

최근 등록된 덧글
좋은 글 감사합니다!!
by EE at 01/08
오랫동안 안드로이드 개발했지..
by 감사 at 05/08
좋은 글 잘보고 갑니다. 오래..
by ㄳㄳ at 05/07
똑같이 블로그를 하는 입장에..
by kwwon at 11/13
감사합니다. 정말 좋은자료네..
by 냐츠 at 06/26
포토로그

나의엘프의 포토로그
태그
아이콘사이즈 쎌바이오텍 상태바사이즈 모바일 스마트폰 공간 보유세 타운하우스 테라스가든 개발 전세 부동산대책 집값 주식 내이글루결산 응암1구역 원목 응암2구역 주택가격 메조트론 투자설명회 부동산 펜션 사이즈 안드로이드 전세대책 누진세 티크 어플개발
전체보기
최근 등록된 트랙백
garcinia cambogia fruit
by
garcinia cambogia
by
garcinia cambogia wikipe..
by
garcinia cambogia weight ..
by
http://helenmccrory.org/
by
buy pure garcinia cambo..
by
예비 창업자 & 소기업 사장이..
by 도서출판 부키
기본을 보면 미래가 보인다 2 -..
by 이글루스 블로거들의 살아있는..
왜 우리는 책을 읽어야 하는가? ..
by Fly, Hendrix, Fly
함정-으로 이어질 블로그링
by blogring.org
이전블로그
more...
이글루 파인더

rss

skin by 狂風
태그 : 안드로이드

2012/08/16   [안드로이드] 정리해 두면 좋을 각종 해상도별 사이즈 정리 (계속 업데이트 예정)
2010/12/09   [안드로이드] 2.5 예제로 이해하는 ListView와 Adapter (2) [19]
2010/11/17   [안드로이드] 2.5 예제로 이해하는 ListView와 Adapter (1) [10]
2010/11/16   [안드로이드] 2.4 java 소스에서 UI 컨트롤하기 [2]
2010/10/09   [안드로이드] 1-1. 모바일 운영체제 안드로이드

[안드로이드] 정리해 두면 좋을 각종 해상도별 사이즈 정리 (계속 업데이트 예정)

  1. 아이콘 사이즈
    • ldpi(120dpi) : 36 x 36 px
    • mdpi(160dpi) : 48 x 48 px
    • hdpi(240dpi) : 72 x 72 px
    • xhdpi(320dpi) : 96 x 96 px
    • xxhdpi(480dpi) : 144 x 144 px
  2. 상태바 사이즈
    • ldpi(120dpi) : 19 px
    • mdpi(160dpi) : 25 px
    • hdpi(240dpi) : 38 px
    • xhdpi(320dpi) : 50 px

 

by 나의엘프 | 2012/08/16 20:05 | TokTokLab(모바일개발) | 트랙백 | 덧글(0)

[안드로이드] 2.5 예제로 이해하는 ListView와 Adapter (2)

2.5 예제로 이해하는 ListView와 Adapter (2)

들어가는 말 : 바로 올리려고 했습니다만, 바쁜 일이 또 생기면서 늦어졌습니다. 하지만, 바쁘다고 언제까지 미룰수도 없고, 쓰다 만 챕터는 얼른 써야 겠습니다. ^^ListView와 Adapter의 악어와 악어새 관계, 오늘로써 거의 모든게 파헤쳐 진다고 할 수 있습니다.

=====================================================================================================================
[그림32]
지난 시간에 올렸던 소스에 이어, [그림32]와 같이, ListAdapter에서 가장 중요한 부분에 해당되는 getView()함수를 분석해 보겠습니다. 개념적으로 설명하자면, 이 getView는 리스트 뷰의 각 행별 레이아웃을 정의하고 원하는 데이터를 뿌리는 일련의 과정을 실행하는 함수라고 할 수 있다. 이제 getView 소스로 들어가 보자.

    public View getView(int position, View convertView, ViewGroup parent) {
    - position : 행의 index를 의미
    - convertView : 행 전체를 나타내는 뷰를 의미한다.
    - parent : 어댑터를 가지고 있는 부모 뷰를 의미한다. 여기서는 ListView가 되겠다.

        if (convertView == null)
        {
            LayoutInflater inflater = (LayoutInflater)HelloWorld.getInstance().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.noticeitem, parent, false);
            ViewHolder holder = new ViewHolder();
            holder.title = (TextView)convertView.findViewById(R.id.notice_title);
            holder.date = (TextView)convertView.findViewById(R.id.notice_date);
            holder.body = (TextView)convertView.findViewById(R.id.notice_content);
            convertView.setTag(holder);
        }
    - convertView에 null이 넘어오면, LayoutInflater를 이용해서 noticeitem이라는 layout을 전개한다.
    - ViewHolder 객체를 생성해서 convertView 내부의 title, date, content를 의미하는 layout내부 객체를 저장하고, convertView에 setTag 함수를 통해서 ViewHolder를 convertView 에 저장시킨다.
    - 여기서, convertView == null 을 체크하는 것은, 매번 생성할 수도 있지만, 이 getView함수는 해당 행이 화면에 표시되어야 할 때(예:스크롤될 때)마다 호출되기 때문에, 매번 화면을 생성하는 것은 속도에도 영향을 미치고, 메모리 관리에도 좋지 못하기 때문이다.

 별거 아니지만, 여기까지가 getView의 핵심 소스라고 할 수 있다. 그 아랫줄에는, 멤버로 가지고 있는 리스트형 데이터 객체 _alData에 있는 데이터 중 position 번째에 해당하는 title, date, content 를 holder.title, holder.date, holder.body에 각각 setText 시키고, 아코디언처럼 펼쳐지게 하기 위해서 OnClick 시마다 펼쳐지면서 해당행에 해당하는 URL을 통해 httpGet으로 content를 가져와서 holder.body에 setText시키고, 다시 한번 누르면 holder.body를 보이지 않게 해서 닫히게 해 놓는 것이 전부이다. 여기에서, 아코디언이 반쯤 펼쳐지면서 loading되는 글자나 그림이 나왔다가 httpGet이 완료되면 전체가 나오도록 하려면, loading이미지를 넣어주고 Thread를 사용하여 데이터를 요청하고, 다 가져오면 setText하도록 한다거나, 그 중간형태를 취하려면 setText("loading") 을 한번 하고, httpGet을 호출한 후 다시 한번 setText(result)를 한다거나 하는 등 여러가지 방법을 생각할 수 있다. 하지만, 예제로서는 이만큼도 훌륭하다고 본다. 나머지는 직접 여러가지를 궁리하여 개발해 보기 바란다.

그런데, 여기서 한가지 의문점이 든다. (필자는 실제로 이 문제때문에 하루를 홀랑 날려버린 경험이 있다.) 위 if문, 즉, convertView에 null 이 넘어 왔을 때 생성하고 데이터도 한번 넣어두면 될 것인데, setText는 매번 하고 있는 것을 알 수 있다. 이 이야기는, n번째 행이 처음 보일 때 Layout은 한번만 생성해 두지만, 내부에 데이터는 스크롤이 되어 getView가 불리울 때마다 setText를 통해서 데이터를 넣는 것이다. 그런데, 데이터를 넣는 작업도 if문 안에서 한번만 하면 훨씬 효율적이지 않을까? 라는 생각을 하기 쉽상이다. 하지만, 곰곰히 생각해 보자. 그렇게 되어 있다는 것은 거꾸로 말하면 1만개의 행이 있으면 내부적으로 1만개의 View가 생성된다는 것과 같으니, 이것은 정말 비효율적인 것이다. 그래서, 안드로이드에서는 내부적으로 Adapter의 convertView를 특정 로직에 의해 적당한 크기의 Pool형태로 가지고 있으면서, 이전에 생성되었으나, 현재는 보여주지 않는 행에서 기 생성된 convertView를 재사용하는 형태를 취하고 있다. 따라서, 그냥 아무 생각없이, 재활용한답시고, if문 안에 데이터를 넣어두고 철썩같이 믿으면, 위아래로 스크롤 하다보면 1번째 행의 내용이 10번째 행에 다시 나타나는 어처구니 없는(?) 현상에 직면하게 되고, 머릿속은 하얗게 되며, 안드로이드를 원망하는 사태가 발생할 수 있다. 그래서, 무턱대고 용감하게 깊이 생각하지 않고 대충 따라하게 되면 마음과 몸이 고생하게 되는 것이다. ^^;;; 다른 분들은 이런 경험을 하지 않기를 바랄 뿐이다. 필자의 경우, 그런 내용으로 고생한 것이 아니라, 뷰에 데이터를 연결할 수 있는 setTag함수를 통해서 데이터를 저장해 두고, 그것이 다음에 다시 쓸 때에도 살아있어주기를 기대했다. 그러나, View는 풀링되면서 tag는 따로 저장해 주는 센스를 안드로이드는 발휘해주지 않았던 것이다.(사실, 당연히 그럴리가 없다.) 분명히 10번째 행에 필요한 데이터를 setTag 해 두었는데, getTag를 해 보니 엉뚱한 데이터가 나오는 것이 아닌가? 모쪼록 여러분들은 Adapter의 getView를 제대로 이해하여 이런 경험을 하지 않기를 바라면서, 리스트뷰와 어댑터의 관계에 대한 이야기는 .. 여기서 끝~

=====================================================================================================================
휴... 요즘처럼 일이 넘쳐나는 경우는 IT사업가에게 흔치 않은 기회인 것은 분명합니다. 이 시기에 어떻게 하느냐가 앞으로 10년을 좌지우지 합니다. 하지만, 자기가 가진 기술에 자부심을 갖는 건 좋지만, 쫌생이처럼 별 것도 아닌 기술을 가지고 나는 아는 것을 남은 모르길 바라는 마음을 가지고는 큰 일을 할 수 없다고 생각합니다. 제가 쓰고 있는 이 강좌들은 그런 축에도 끼지 않는 보잘것 없는 일이지만, 내가 잘 몰라 고생했던 길을 다른 사람들은 겪지 않길 바라는 마음... 그 마음들이 모여야 세상이 발전하는게 아닐까요? 작은 도움이라도 되었다면, 이 글을 읽는 많은 분들이 자신의 경험과 생각들을 공유하길 바랍니다.

모두들.. 좋은 연말 보내세요~ 올해에는 작년보다 발전했길 바라고, 내년에는 올해보다 더 큰 발전을 이루시길 바랍니다.
연말까지는 간단한 팁이 아닌 공식 추가 강좌는 힘들지 않을까 생각됩니다. 미리 해피 뉴이어~
by 나의엘프 | 2010/12/09 15:02 | TokTokLab(모바일개발) | 트랙백 | 핑백(1) | 덧글(19)

[안드로이드] 2.5 예제로 이해하는 ListView와 Adapter (1)

2.5 예제로 이해하는 ListView와 Adapter

 들어가는 말 : 여기까지 오는데 시간이 꽤나 걸렸습니다. 일을 하면서 짬짬이 만들기에는 어떤 예제를 구성할지 생각할 시간부터가 부족하더군요. 하지만, 예제로 이해해야 할 것들 중 1번이 레이아웃이라면, 좁은 화면 안에서의 모바일 어플 개발을 할 때 가장 많이 사용할 것이 ListView일 것입니다. 안드로이드의 ListView에는, 매우 편리하지만 또한 그 편리함 때문에 한계를 가지기도 하는 Adapter라는 개념이 있습니다. 자, 이제 두 번, 혹은 세 번에 걸쳐 ListView와 Adapter의 악어와 악어새 관계에 대해 예제로 파헤쳐 보겠습니다.

=====================================================================================================================

[그림27]

 그림 27과 같이 이전에 사용하던 레이아웃 main.xml 파일의 하단에 리스트 뷰를 배치한다. 레이아웃쪽에서는 특별히 할 일이 없다. 여기에서 데이터와 관련된 작업을 한다거나 하는 일은 거의 없다고 봐도 무방하다. 특별히 리스트뷰의 기능자체를 확장해서 새로운 클래스를 만들기 전에는, 몇가지 속성을 제외하고는 거의 똑같다고 생각하면 된다.

[그림28]
 예전과 마찬가지로, initView() 함수는 HelloWorld.java 의 onCreate에서 실행하고 있다. 지난 장에 잠시 본 결과 화면이 나오는 소스라고 하기엔 어딘가 허전하다. 하는 일이라고는 findViewById 를 이용해서 리스트뷰를 멤버 객체에 저장하고, _listView.setAdapter(new NoticeListAdapter(this)); 를 불러줬을 따름이다. 그렇다. 이 NoticeListAdapter라는 클래스가 화면에 뿌려지는 데이터를 담당한다. 뿐만 아니라, 리스트뷰의 행 내부의 레이아웃까지도 책임진다. 따라서, 리스트뷰에 대한 실질적인 코딩은 Adapter를 통해서 하게 되어 있음을 눈치챌 수 있다. 실제로, 기능이 꽤나 많은 거대한 Adapter 하나를 만들고 내부에 여러가지 함수들을 통해서, 화면 자체를 바꾸지 않고 전혀 다른 내용이 나오도록 코딩을 하기도 하고, 비슷한 상황이지만, 한 클래스가 너무 비대해지지 않게 하거나 모듈화를 위해서 Adapter를 여러 버전으로 쪼개서 setAdapter를 통해 바꿔주기만 하도록 코딩하기도 한다. 하지만, 대체로 내용이 바뀔 때 리스트뷰 외부의 레이아웃이나 내용도 바뀌기 때문에, 리스트뷰 하나당 어댑터 뷰 하나, 데이터 종류도 하나인 경우가 많다. 각설하고, 우리는, 책에 나온 시시콜콜한 이야기를 하려는게 아니라 똘똘한 예제 하나로 한걸음 성큼 다가서는 것이 목표이므로, 얼른 NoticeListAdapter 소스를 살펴보자.


[그림29]
 첫 줄부터 살펴보면, 
public class NoticeListView extends BaseAdapter
: BaseAdapter 라는 안드로이드 내부의 어댑터 기본 클래스가 존재하고, 그것을 상속받아서 필요한 함수들을 오버라이드하여 사용하면 됨을 알 수 있다.

private ArrayList<ChildData> _alData;
: ChildData로 이루어진 ArrayList 를 가진 것으로 보아, 리스트뷰에 행으로 쭉 뿌려지게 될 내용을 담는 자료구조일 것으로 생각된다. 바로 아래에 ChildData에 대한 정의가 있다. 내부를 보아하니, state, title, url, date로 구성되어 있는데, 상태라는 것이 있고 제목이 있고, 그 제목에 해당하는 내부 데이터가 있는 url이 있겠고, 작성된 날짜가 표시되어야 함을 알 수 있다. 쭉 내려와 보면, 생성자에서 이 자료구조 객체를 new 연산자로 생성함을 알 수 있다. 그리고, initData() 함수를 호출한다. 직감적으로, 이 함수 내부에서 뭔가 필요한 데이터 리스트를 만들어 낼 것으로 추측하고, 아래로 내려가 본다.

public boolean hasStableIds() : 내용이 비어 있으므로, 중요한 것이 아닌가보다. 그냥 넘어간다(사실 이 부분을 건드려야 할 내용이 생긴다면, 리스트뷰를 마음껏 주무르고 있다는 뜻이 된다. 평소엔 거의 건드릴 일이 없다.)

public Object getItem(int position) : 오버라이드된 함수인데, 리스트 뷰 내부에서도 사용하고, 어댑터 외부에서 데이터에 접근해야 할 때 사용된다. position에 해당하는 객체를 리턴해 주면 된다.

[그림30]
위 initData() 함수는, 오로지 이 예제를 위해서 만든 내용인데, 쉽게 그냥 바로 데이터를 넣어주는 예제를 위한 예제로 만들 수도 있었지만, 고민 끝에 실제로 현업에서 사용할 수 있는 유용한 스타일로 작성하였다. 주로, 데이터를 외부에서 넣어주고 어댑터에서는 데이터를 저장하고, 보여주는 용도로만 활용하는 경우가 많지만, 필자는 어댑터에 데이터를 조회하는 역할을 부여하여 코딩하기를 즐겨 한다. 여러가지 방법을 취해 봤지만, 이것이 가장 깔끔하다고 생각한다. 따라서, 실제로 웹서버로부터 xml데이터를 가져와서 파싱하여 화면에 뿌려주기 위해, CommonUtil.httpGetStream 이라는 이름으로 http 통신을 통해 InputStream 객체를 리턴하는 함수를 만들어 두고, 이것을 이용해 개인 웹서버에서 데이터를 가져온 후 잘 알려진 XML 파싱을 통해 한줄씩 필요한 데이터를 _alData 객체에 add 하고 있음을 알 수 있다. 참고로 하기 위해 아래 [그림31]에 noticelist.xml 내용을 첨부한다.

[그림31]
각각 제목, 날짜, URL을 가지고 있음을 알 수 있다. 그리고, 데이터를 다 넣고 나면 아래에 notifyDataSetChanged(); 라는 함수가 불리고 있는데, 이것을 불러줘야 실제로 변경된 데이터를 기준으로 화면에 ListView가 다시 그려지게 된다. 자, 이제 앞서 예고한대로 가장 중요한, 리스트뷰의 각 행이 실제로 화면에 뿌려지는 부분이 어떻게 구현되는지를 알아볼 차례다.

아쉽지만, 이 부분은 다음 시간을 통해 2.5 예제로 이해하는 ListView와 Adapter(2) 에서 알아보도록 하자.

===================================================================================================================
알기 쉽게, 그리고 실제 사용에 유용하도록 예제를 몇번이고 이렇게 저렇게 수정하느라 오랜 시간이 걸렸습니다. 너무 많은 내용을 한번에 담으려니까 너무 복잡해지고, 그렇다고 보여지는 부분만 설명하자니, 실제로 어떻게 사용하면 좋을지를 알려주기에 부족하고, 고민이 많이 되더군요. 모쪼록... 그래도 다른 강좌나 책보다는 실무적으로도 도움이 되길 바랍니다.
by 나의엘프 | 2010/11/17 09:02 | TokTokLab(모바일개발) | 트랙백 | 덧글(10)

[안드로이드] 2.4 java 소스에서 UI 컨트롤하기


2.4 java 소스에서 UI 컨트롤하기

 간단한 예제를 통해 xml 에서 정의한 UI 레이아웃을 java소스 상에서 어떻게 컨트롤하는지, 한눈에 알아보자.

[그림25]

[그림26]
 [그림25] 소스를 살펴 보자.
TextView view = (TextView)findViewById(R.id.company_name);
: 이 의미는 R.id.company_name 이라는 id를 부여받은 TextView 객체를 찾아서(find) 앞으로 사용할 view 변수에 담겠다는 것이다. 따라서, 이렇게 가져온 view 객체에 각종 함수들을 사용하여 원하는 동작을 구현할 수 있다.
view.setText("똑똑한 모바일 라이프... 톡톡랩");
: 해당 TextView에 "똑똑한 모바일 라이프... 톡톡랩"이라는 글자가 보여지게 하라는 듰이다.

참고로, 위 initView() 함수는, [그림25]상에는 안보이지만, HelloWorld.java의 onCreate 에서 부르도록 처리되어 있다.

[그림26] 의 상단에 보면 회사명과 영문회사명이 소스에서 입력한 대로 변경되어 있음을 알 수 있다.

 매우 간단한 예제이지만, 기본적으로 XML 과 Java가 어떤 식으로 엮이게 되는지 알 수 있다. 처음 한번만 처리하는 것이 아니라, 자주 사용해야 하는 View라면, 멤버변수를 선언하고 onCreate 시점에서 findViewById를 통해 한번만 바인딩시키고, 데이터를 조회하거나 각종 이벤트 발생시에 멤버 변수를 통해 UI를 컨트롤하면 보다 편리하게 활용할 수 있다.

===================================================================================================================
오래 기다리셨습니다만, 너무 간단하게 끝난 감이 있습니다. [그림 26] 하단에 보면 리스트 형태로 제목과 날짜가 나와 있는 모습을 볼 수 있습니다. 이것이 그동안 짬짬히 시간을 내어 만든 ListView 와 Adapter 를 다루는 예제입니다. 다음 시간에는 바로 이어서 리스트 뷰를 이해하면서 간단하게 아코디언처럼 늘어났다 줄었다 하면서 세부 내역을 보여줄 수 있도록 응용하는 방법을 풀어 보겠습니다.
by 나의엘프 | 2010/11/16 01:21 | TokTokLab(모바일개발) | 트랙백(1) | 덧글(2)

[안드로이드] 1-1. 모바일 운영체제 안드로이드

1. 안드로이드???

1-1. 모바일 운영체제 안드로이드

* 바야흐로 모바일 시대

 바쁘게 살아가는 도시인들부터 시골의 농부에 이르기까지, 대학생부터 초등학생, 유치원생들까지, 직장인들부터 주부들까지... 현대인들의 주머니 속에는 휴대폰이 하나씩은 다 있다. 10여년 전만 해도, 휴대폰은 전화를 걸고 받는 기능 그 자체로 놀라움이었다. 그러나, 아이폰을 비롯한 현재의 휴대폰, 즉 스마트폰은 전화와 문자, MP3와 카메라, TV 기능까지 기본에 속하고, 인터넷 서핑을 하고, 실시간으로 메일을 주고 받을 수 있게 해 준다. 화면의 제약이 있을 뿐, 책상 위에 있는 컴퓨터의 대부분의 기능을 소화한다. 바지 주머니엔 휴대폰, 속주머니엔 MP3, 가방엔 노트북, 여행갈 땐 PMP... 이 모든 것이 전화기 안으로 들어온 것이다. 놀랍지 않은가? 이것은 놀라운 혁신이며, 이미 우리 삶에 중대한 변화를 가져왔으나, 이는 앞으로 우리가 맞이할 변화의 전주곡에 불과하다. 세상의 패러다임이 변화하는 스마트폰 시대의 패권을 잡기 위해 수많은 군웅들이 할거하는 춘추전국시대이다. 

* 스마트폰 시대의 패자, 아이폰

 가장 먼저 세계를 재패한 영웅은 바로 애플의 아이폰이다. 출시 3년만에 5천만대의 판매량을 기록하며, 전 세계에 돌풍을 일으켰다. 아이폰은 무엇인가? 단순히 생각하면, 애플에서 출시한 기능 많고 디자인이 수려한 휴대폰, 즉 하드웨어다. PC의 기능을 탑재하고, 인터넷이 가능한 스마트폰은 이전에도 많았다. 이메일을 주고 받을 수 있는 블랙베리도 큰 히트를 쳤지만, 아이폰과 같은 돌풍을 일으키진 못했다. 그렇다면, 아이폰은 뭐가 달랐던 것일까? 아이폰 전후, 가장 큰 차이는 기능과 정보의 제공자다. 기존에는 휴대폰의 모든 기능과 정보는 생산자가 만들어냈으나, 아이폰은 앱스토어를 통해 개발자들이 아이폰에 얼마든지 새로운 기능을 불어넣을 수 있게 했다. 소비자들은 아무리 좋은 휴대폰을 사도, 바로 다음 주에 더 좋은 기능을 가진 제품이 나오면, 부러워해야 했으다. 그러나 이제는, 아이폰을 구입하고 앱스토어에 들어가면, 하루에도 수천개의 새로운 어플들이 올라온다. 일반적으로 0.99%의 저렴한 비용으로, 혹은 무료로 수많은 기능들을 추가할 수 있게 되었으니 말이다.

* 안드로이드의 도전

 아이폰은 그 자체가 하드웨어이며, 운영체제이며, 앱스토어다. 스마트폰을 이루는 하드웨어와 운영체제, 어플리케이션을 사고 팔 수 있는 시장 등 모든 것은 애플이 제공하며, 추가 기능, 즉 어플리케이션만 불특정 다수의 정보제공자가 존재하는 형태를 가지고 있다. 아이폰은 디자인도 혁신적이기 때문에 대다수의 사람들을 만족시키고 있다. 그러나, 남들과 다른 개성을 원하는 사람들에게 어필하기에는 그 한계가 있다. 하드웨어는 아이폰, 즉 단일 기종에서만 사용이 가능하기 때문이다. 이것을 뛰어 넘을 수 있도록 고안된 것이 바로 안드로이드이다. 안드로이드는 어플리케이션 개발 뿐만 아니라 하드웨어, 그리고 어플리케이션 배포와 판매를 할 수 있는 기능을 모두 시장에 오픈했다. 일반 개발자들이 개발하기 힘든, 하드웨어와 어플리케이션을 이어주는 복잡한 부분, 즉 운영체제만 안드로이드가 책임을 지는 형태다. 따라서 삼성전자, 노키아 등 수많은 휴대폰 제조업체들이 안드로이드 인터페이스 표준에 맞게 휴대폰을 제조하여 판매할 수 있으며, 개발자들은 제품 기종에 상관없이 안드로이드 운영체제에 맞게 어플리케이션을 만들 수 있게 되었다. 이제 고객들은 아이폰과 같은 수많은 어플리케이션의 장점을 누림과 동시에, 저마다 원하는 스타일, 원하는 브랜드의 휴대폰을 고를 수도 있게 되었다. 아이폰의 독주 체제는 더이상 지속될 수 없다. 시장 선점의 프리미엄을 누리는 정도에 그치게 될 것이라고 필자는 믿고 있다.


 다만, 이러한 논리는 안드로이드가 제공할 수 있는 기능이, 최소한 아이폰의 기능들을 대부분 포함하거나 비슷하다는 전제하의 이야기이다. 이런 점에서 보면 현재의 안드로이드는 아직 역부족이다. 개발자들이 사용할 수 있는 기본 UI들의 디자인이나, 개발 편의성, 운영체제의 안정성 등 모든 면에서 아이폰에 뒤지는게 사실이다. 그럼에도 불구하고 삼성전자 갤럭시S와 HTC 디자이어 폰 등이 엄청난 판매를 기록하고 있다. 이는, 사용자들의 취향은 다양하여, 아무리 뛰어난 명품이 있어도 단일 제품에는 만족하지 못하기 때문이다. 많은 개발자들이 아이폰이라는 단일 제품의 어플리케이션 개발, 더구나 포화상태에 가까워서 이미 엄청난 경쟁률을 뚫어야 하는 좁은 세계 보다는, 더 넓고 더 개방된 안드로이드의 세상에서 기회를 찾기를 바란다. 분명한 것은, 현재 후발주자인 안드로이드 2.1, 2.2 버전은 시제품에 불과하다. 개방형 플랫폼의 성장은 그 한계를 알 수 없다.



 

by 나의엘프 | 2010/10/09 12:58 | TokTokLab(모바일개발) | 트랙백 | 덧글(0)

◀ 이전 페이지 다음 페이지 ▶