반응형

이전 포스트를 통해 안드로이드 프로젝트의 구조와 구성파일들의 의미를 간략하게나마 확인해보았습니다. 처음에는 설명을 들어도 쉽게 이해하기 어렵고 힘들다는 생각이 들 수 있습니다. 하지만 조금만 익숙해지면 이런 복잡해 보이는 파일구조가 얼마나 편하고 체계적인지 느낄 수 있게될겁니다. 그때까지 이해가 다소 안되는 부분이 있어도 그냥 그런가보다 하고 따라하다 보면 분명 어느순간 안드로이드 어플 개발의 프로세스가 자연스럽게 이해될 것입니다.

 

 이번 강좌부터는 실제 어플을 개발하기 위한 내용을 소개해 드리고자 합니다.

이전 강좌를 잘 보셨다면 안드로이드 프로젝트는 역할별로 여러파일이 나뉘어져 있다는 것을 알고 있을겁니다. 안드로이드는 프로젝트를 개발할 때 MVC(Model View Control) 패턴으로 개발하도록 되어 있습니다. 즉, DB(DataBase), Data용 클래스등 값(Value)를 저장하기 위한 Model파트, 보여지는 부분을 담당하는 View파트, 이둘을 연결하고 제어하기위한 Controi파트, 이렇게 세 부분으로 역할을 구분하여 파일을 제작하는 방식을 말합니다. 옷이나 제품을 디자인할 때 사용되는 디자인패턴 같은 것이라고 보면 됩니다. 프로젝트마다 세부적인 구성은 다를 수 있지만 크게 파일들을 구분하면 M,V,C 세가지로 이루어져 있습니다. 아마 C, Java와 같은 Native 언어만 학습하신 분들은 이런 역할별 파일 구분을 많이 연습해보지 않아서 어색하고 어렵게 보여질 수 있을 겁니다. 하지만 이렇게 역할 별로 구분을 하여 파일을 제작하고 관리하게 되면 한 파트가 수정되어도 다른 파트를 수정하지 않아도 되기 때문에 유지보수 및 디버깅이 우수하고 파트별로 제작되기 때문에 본인이 제작하고 있는 부분이 어느 역할을 하게 될지 명확하게 이해할 수 있게 됩니다. 예를 들어 화면에 네모난 모양의 버튼을 만들었는데 동그란 모양으로 바꾸고 싶어질 때 여러 파일들을 검토하고 수정할 필요없이 보여지는 부분인 View파트의 파일만 찾아 변경하면 되도록 제작한다는 것 입니다.

 

 계속 언급했듯이 안드로이드 어플은 Java언어로 개발하는 것입니다. 당연히 여러분이 만든 어플은 자바컴파일러에 의해 실행된다고 생각하시면 됩니다.(사실 실제로는 'Dalvik'이라는 안드로이드 가상 머신에 의해 실행되어집니다) 당연히 Model, View, Control 모두 자바 언어로 개발하시는 겁니다. 특히 화면에 보여지는 부분을 담당하는 View 파트 역시 Java로 개발하는 것이 원래의 개발 형식입니다. c언어 계열의 MFC나 Java의 AWT, Swing 같은 윈도우 프로그램 제작을 연습해 보신 분들은 잘 아실 겁니다. 화면에 버튼을 만들고 싶으면 버튼의 능력을 보유한 'Button' 이라는 클래스로 객체를 생성하여 화면에 보여지게 만들었을 겁니다. 물론 안해보신분들은 이게 무슨 소린가 싶으실 겁니다. 괜찮습니다. 안해보신 분들도 이제부터 배워보시면 됩니다.

 아무튼 기존 c나 java같은 언어를 통해 화면을 구성하면 녹색의 네모박스 하나 만들고 보여지게 하는 것조차 다소 쉽지 않게 프로그래밍 하도록 되어있습니다. 하물며 이런 네모 모양이 하나가 아니라 여러개고 거기에 글씨도 보여주고 어떤 글씨는 크고, 어떤 글씨는 작고 등등 많은 소소한 구성차이들을 일일이 제어해서 화면에 표현하기가 여간 번거롭고 복잡할 수 없습니다. 그래서 안드로이드는 좀더 쉬운 방식의 화면구성을 위한 언어가 있으면 좋겠다고 생각하게 되었습니다. 그래서 View를 제작하는 파트는 Java언어가 아닌 'XML'언어를 통해 개발하게 되었습니다. 이미 이전 포스트를 통해 XML언어에 대한 기본적인 형식을 보여드렸으니 익숙해 지는 것은 실제 프로젝트를 제작하면서 하나하나 익혀가도록 하겠습니다.


 실제 프로젝트의 제작에 앞서 이렇게 View파트에 대해 언급한 이유는 어떤 어플을 만들던지 화면에 보여지는 부분을 개발자가 원하는 모양으로 표현할 수 있어야 하기 때문입니다. 여러분들이 아무리 우수한 아이디어와 아이템, 알고리즘을 통해 기가막힌 어플을 만들더라도 화면구성이 어설프면 그 어플은 사용자들로 부터 외면받게 됩니다. 반대로 기능이나 기법은 평법하고 특별할게 없더라도 화면에 보여지는 모습이 좋으면 사용자로부터 폭발적인 인기를 얻게 될 수도 있는 것입니다. 그래서 가장 먼저 화면을 만들어 내는 방법부터 학습을 시작하고자 합니다.


 안드로이드 어플을 제작하면서 여러분들이 가장 중요하고 빈번하게 사용하게 되는 2개의 Class가 있습니다. 'Activity' 와 'View' 입니다.


자. 생각을 해보겠습니다. 스마트폰의 화면에 글씨를 하나 표시하거나 사용자의 터치에 반응을 하는 것이 단순히 코드 몇자 써서 되겠습니까? 화면에 'Hello'라는 글자 하나가 보여지게 하기 위해서는 스마트폰이라는 하드웨어를 제어하여 전기적 신호를 통해 화면상에 보여지게 만들어야 합니다. 반대로 사용자가 화면을 터치하면 디스플레이라는 하드웨어가 정전식이든 감압식이든 전기적인 신호를 통해 입력정보를 안드로이드라는 운영체제에게 전달하고 운영체제는 이를 여러분의 어플에 전달합니다. 그럼 여러분들은 이런 전기적인 신호를 분석하여 터치위치나 여러정보를 분석하여 반응하도록 프로그램을 짜야합니다. 이런 작업들은 하드웨어를 제어해야 하는 만큼 그렇게 쉬울리가 없습니다. 이런 간단치 않은 작업들을 어플 개발자들이 매번 작업하기 번거로울 수 밖에 없겠죠. 그래서 안드로이드에서 만들어 준 것이 'Activity' 라는 클래스 입니다. Activity클래스가 이런 일련의 작업들을 대신 책임져 준다고 생각하시면 됩니다. 여러분들은 화면에 무엇인가를 보여주거나 입력을 받으려면 무조건 Activity를 상속받아 사용하시면 됩니다. 그렇기 때문에 안드로이드 프로젝트를 처음 생성하면 자동으로 Activity를 상속받은 MainActivity를 만들어 준 겁니다. 대부분의 어플은 당연히 화면을 가지고 있는 경우가 99%일 것이니 Activity는 어플 제작에서 매우 중요한 클래스라고 할 수 있겠죠. 

 여기서 중요한 것은 'Activity'는 화면을 담당하는 클래스이지만 화면에 보여지는 내용물(Contents)을 구성하는 역할은 아니라는 것입니다. Activity는 오로지 화면에 대한 담당자 또는 관리자의 역할만 하고 실제 보여지는 모든 것들은 'View' 라는 클래스를 통해 만들어집니다.

 안드로이드에서는 모든 보여지는 것은 View라는 클래스를 상속받아 만들게 됩니다. 이름 자체가 이미 '보여지는 것' , '시야' 라는 뜻의 'View' 이니 이름만 봐도 대략적으로 어떤 역할인지 쉽게 이해가 갈 겁니다. 실제로 상속받아 사용하는 방법은 매우 직관적입니다. 이미 View를 상속받아 특별한 역할을 수행하는 View의 자식클래스르 많이 만들어 놓았습니다. 

 이름만 들어도 쉽게 이해 될 수 있습니다. 만약 여러분이 글씨, 즉 Text를 보여주고 싶으면 'TextView' , 이미지를 보여주고 싶으면 'ImageView' ,  버튼을 만들고 싶다면 'Button' , 글씨를 입력받고 싶으면 'EditText' 등 많은 종류의 View들을 만들어 놓았습니다. 


 아래 그림은 View의 상속구조를 보여주고 있습니다. 


[View 상속계층도(체계도)]




 


[그림출처 : www.soen.kr]


 이렇듯 특정한 역할을 담당하는 View들이 있기때문에 여러분들은 이 중에서 원하는 역할을 수행하는 View를 적절한 위치에 사용하시기만 하면 됩니다. 이렇게 독립적으로 특정한 역할을 수행하는 View들을 용어적으로 'Widget' 이라고 부릅니다. 


 어플의 화면을 꾸미고 만드는 것은 View 들을 통해 만들고 이를 Activity 클래스에서 설정하면 화면에 보이게 되고 사용할 수 있게 되는 것입니다. Activity 에서는 단순히 setContentView()라는 메소드를 통해 우리가 만든 View를 보여주기만 하면 됩니다. 매우 간단한 작업입니다. 결국 화면 꾸미기는 Activity 클래스가 아니라 View 만 잘 구성하면 되는 것입니다. 그리고 그 View를 만드는 것은 Java 언어를 통해서 할 수 도 있지만 앞에서 언급했듯이 XML에서 하는 것이 보다 수월하고 직관적이기 때문에  XML 파일만 작성하면 화면의 모양은 원하는 형태로 제작할 수 있다는 것입니다.


 이전 포스트를 통해서 xml에 대한 부분은 잠시 언급했었습니다. 제 강좌에서는 안드로이드 프로그래밍에 필요한 정도의 문법만 소개하고자 합니다. 기타 언어의 특성은 인터넷이나 서적을 통해 학습해 보시기 바랍니다. 앞으로 제가 진행하는 안드로이드 강좌에서 XML의 사용은 Java언어에서 객체를 생성할때 사용하는 new 의 대신이라고 생각하시고 보시면 됩니다. 말로만 진행했던 부분을 점검하기 위해 아직 이르지만 Java로 View 객체를 생성해서 화면에 보여지는 프로젝트를 만들어 보겠습니다.


 다른 강좌나 서적들은 보통 바로 XML에 대한 소개와 View에 대한 소개부터 시작합니다. 그래서 초반에 조금 빠르게 진도가 나가게 됩니다. 하지만 필자는 기본이 충실하지 못하면 모래위에 성을 짓는 것과 같다고 생각하는 편이어서 시작부분에 다소 이론적인 부분을 많이 강조하게 됩니다. 초반에는 다소 느리지만 중반이후부터는 기본이 되어있기때문에 설명을 빠르게 전개시키는 편입니다. 제 강좌를 보고 계시는 분들은 이런 강좌 진행 방식을 참고하시고 보시기를 부탁드립니다.

반응형
반응형

 자. 그럼 안드로이드 프로젝트의 구조를 보겠습니다. 'Package Explorer'창을 보겠습니다.

 


 

 우선 'Hello'라는 프로젝트 폴더 안에 상당히 많은 폴더가 보입니다. 폴더의 이름들이 모두 단어를 줄여서 써놓은 것이라서 처음에 읽기 어려울 수도 있는 데 아주 단순한 단어들입니다. 단어만 알아도 역할이 짐작되는 이름들입니다. 지금 당장 저 폴더들이나 파일들을 모두 알 필요는 없습니다. 우선 각 폴더에 대한 간략한 소개만 하고 우리가 어플을 제작할 때 자주 다루게 되는 폴더와 파일들을 우선으로 소개하면서 강좌를 진행하고자 합니다. 가끔 시작부터 모든 내용을 완벽히 이해하면서 넘어가고자 하는 분들이 있는데 사실 좋은 자세이지만 현실적으로 매우 어렵습니다. 더하기도 못하는데 곱하기를 이해하려는 것과 같은 맥락입니다. 저 역시 모두 설명하면서 가면 좋겠지만 덧셈을 가르쳐야 곱셈을 설명할 수 있습니다. 제 강좌에서 나중에 설명하겠다고 하고 넘어가는 것들이 대부분 그런 상황입니다. 그래서 우선 현재 우선 알아야 하는 것부터 그리고 예제에 필요한 부분을 위주로 설명하면서 차츰 전체를 설명하고 자 합니다. 제가 강좌에서 설명없이 넘어가더라도 이점 양해 바랍니다. 

 

 우선 프로젝트를 생성할 때 마다 저 폴더들은 모두 포함되어 있으니 간략히 소개해 드리겠습니다.(버전업이 되면서 점점 폴더가 많아지고 있습니다. 소개한 거 말고 또 추가 될 수도 있습니다. )

 

 ㆍsrc(Source) 폴더

      - java언어로 만들어진 소스파일들이 위치하는 폴더입니다.

      - 실제 어플을 구동하고 컨트롤 하는 곳이죠. 바로 여러분들이 가장 많이 사용하게 되는 폴더입니다.

 

 ㆍgen(Generated Java Files) 폴더

      - java파일이 저장되는 폴더입니다.

      - src폴더와 달리 이름처럼 자동으로 파일들이 만들어 집니다.

      - 프로젝트내에서 어플에 사용되는 여러 Resource들을 손쉽게 java코드에서 사용할 수 있게 만들어주는 매우 중요한 폴더

      - 자동으로 파일과 코드가 작성되며 여러분이 수정할 수 없습니다. 설사 수정하더라도 저장되거나 적용되지 않으며 원상태를 유지함

 

 ㆍGoogle APIs, Android Private Libraries, Android Dependencies, libs 폴더

      - Activity Class 처럼 특정기능을 수행하도록 이미 설계되어 있는 클래스들이 선언되어 있는 압출파일들이 위치한 폴더

      - 일종의 클래스 파일들의 도서관 폴더

 

 ㆍassets 폴더

      - Resource 폴더에서 관리하지 않은 대용량 파일이나 글꼴파일, HTML파일들이 위치하는 폴더

 

 ㆍbin(Binary) 폴더 

      - 원시파일들을 컴파일한 class파일들이 위치하는 폴더

      - apk파일이 위치하는 폴더

 

 ㆍres(Resource) 폴더

     - 프로젝트에 사용되어지는 이미지나, 음원파일, 동영상파일, 문자열 값, 배치 등 모든 리소스파일들이 위치하는 폴더

     - 리소스의 타입별로 세부 폴더로 나뉘어져 관리하고 있음.(ex. drawable : 이미지파일, raw : 음원파일 etc..)

     - 사용하고자 하는 리소스파일을 드래그앤 드롭으로 추가할 수 있으며 자동으로 관리됨.(추후 설명예정)

     - 세부폴더의 이름은 정해져 있으며 기본적으로 만들어져 있는 폴더 말고 몇가지가 더 있음.(추후 설명예정)

     - 안에 사용하는 모든 파일들의 파일명은 영어소문자와 숫자만 사용

 

 ㆍAndroidManifest.xml 파일

     - 제작하고 있는 어플에 대한 정보 및 설정이 작성되어 있는 파일

     - 모든 프로젝트마다 이 이름의 파일은 하나씩 있으며 변경할 수 없음.(Hint. 이 설명을 듣고 프로그램의 시작점을 떠올리시면 Good!)

     - 모든 어플제작에서 가장 기본이며 중요한 파일

 

 ㆍ기타 파일들 

     - 프로젝트의 타겟버전 설정 등 어플이 구동되기 위해 필요한 기타 설정값을 저장하고 있는 파일들

     - 일반적인 어플을 제작할때는 건드릴 필요가 없는 파일들인 만큼 나중에 필요할 때 설명드리겠습니다.

 

 

  자. 이렇게 프로젝트 안에 자동으로 만들어져 있는 폴더와 파일들에 대한 간략한 이해를 해 봤습니다. 물론 위 내용은 말 그대로 간략한 이해 정도의 설명입니다. 어플을 제작하다 보면 자연스럽게 사용하게 되고 설명되어 지니 지금 당장 이 모든 구조와 의미를 확실히 이해하려고 하지 않으셔도 됩니다. 오히려 이 부분을 이해하려고 시간을 투자하다가 결국 제풀이 지쳐 포기하는 경우가 많습니다. 처음엔 뜬 구름잡듯이 이해하고 점점 학습하면서 뚜렷하게 실체화 시켜나가 보겠습니다.

 사실 간략한 설명이라고 하는 위 내용만으로도 슬슬 짜증나기 시작합니다. 이해가 쉽지 않으니까요. 자. 위 폴더와 파일들 중에서 실제 눈여겨 봐야 할 것으로 설명을 압축시켜 보겠습니다. 

 

 우선 안드로이드 프로젝트 안에 어떤 파일들이 추가 되든 만들어지든 상관없이 안드로이드 프로젝트는 크게 3가지 영역으로 나뉘어 관리된다고 보시면 됩니다.

 

 

 

 

  1. Java 원시파일

    - 안드로이드는 자바 언어로 만들어지는 만큼 'xxx.java'와 같이 자바 소스파일들이 있습니다.

    - 자바 소스파일들은 프로젝트 안에서 'src폴더','gen폴더' 2군데 위치하게 되는데 그 중 'gen폴더' 는 자동으로 만들어지고 수정되어 

      지는 곳이기 때문에 여러분들이 건드릴 일은 없습니다. 다만, 작성 된 코드 내용은 확인하고 이해하고 있어야 합니다.(추후 설명)

    - 결국 여러분들이 실제 만들게 되는 모든 java 소스파일은 src폴더에 위치하고 있습니다. 주로 여러분이 보시게 되는 폴더라는 거죠.

    - 지금은 하나의 자바파일만 있지만 앞으로 여러분들이 만들게 되는 자바 소스파일들은 이 폴더에서 생성하시면 됩니다.

    - 어플의 동작을 제어하는 코드가 작성된 파일입니다.

 

 2. 리소스 파일

    - Java 소스파일에 어플의 동작을 제어하는 코드를 작성하셨다면 이 폴더에는 보여지는 모든 자원들을 관리합니다.

    - 사실 Java 소스파일 만으로도 모든 개발이 가능하지만 디버깅도 용이하고 프로그래밍도 쉽게 할 수 있도록 그림이나 음원등과 같은

      파일들을 별도로 보관하고 있습니다. 자바에서 이 폴더의 파일들을 참조해서 화면에 보여준다고 생각하시면 됩니다.

 

 3. AndroidManifest.xml 파일

    - 어플 전체에 대한 설정 정보를 가지고 있는 파일입니다.

    - 프로그램의 총 관리자라고 보시면 되며 어플이 시작할 때 제일 먼저 읽어들이는 파일입니다.

 

 여러분들은 앞으로 기본적인 게임 어플을 제작하는 동안 위 3가지 영역의 파일들만 건드리게 될 겁니다. 나머지 폴더와 파일들은 나중에 보겠습니다. 대략적으로 프로젝트의 구성 폴더와 구조를 보았으니 위 'Hello'어플 프로젝트 예제가 실행되는 순서를 하나씩 보면서 프로젝트의 구조를 세세히 알아보겠습니다. 이 순서만 정확히 인지하시면 안드로이드 어플개발의 절반이상 이해 하셨다고 보아도 무방합니다.

 

 먼저 각 순서에대해 단계별로 설명하고 마지막에 전체 실행 흐름도(순서도)를 보여드리겠습니다.

 

 어플을 실행하면 프로세서가 프로젝트안에 있는 파일들을 읽어서 어플의 동작이 시작되게 됩니다. 다시 말하지만, 컴퓨터는 한번에 하나의 작업만 수행합니다. 아무리 여러줄의 코딩과 파일들이 있더라도 결국 한번에 하나의 파일과 한 줄을 실행하게 된다는 것이죠. 그 한 줄 한 줄을 따라가 보겠습니다. 본인이 컴퓨터의 프로세서라도 생각하시며 따라오시기 바랍니다.

 

1. 어플의 시작

 - 어플을 실행시키면 프로세서가 어플의 프로젝트안에 았는 많은 파일 중에서 가장 먼저 읽는 파일이 있습니다. C나 자바에서는 main메소드가 있는 파일이 제일 처음 읽어지고 실행되어지죠. 익히 알고계시겠지만 이 main메소드는 프로젝트 전체에 오직 하나만 존재해야 합니다. 프로젝트 마다 파일이름도 다르고 코딩 방식도 제 각각 일 수 있기때문에 어떤 메소드부터 시작해야 한다고 정해놓을 필요가 있는 거죠. 그래서 이 main메소드의 이름은 변경할 수 없는 것이고 유일하기 때문에 프로세서의 입장에서는 어떤 프로젝트던지, 그 안에 얼마나 많은 파일이 존재하던지 상관없이 미리 정해져 있는 main이라는 이름의 메소드를 호출함으로서 프로그램이 실행되도록 한 것이지요. 안드로이드도 이 원칙은 동일합니다. 다만, main메소드라는 이름이 없다는 것만 다른 것이지요. 결국 프로젝트마다 오직 하나만 존재하며 그 이름이 변하지 않는 파일을 찾으면 된다는 것 입니다. 안드로이드 프로젝트에서는 'AndroidManifest.xml'이 그 파일이라고 보시면 됩니다. 이 이름은 어떤 안드로이드 프로젝트를 생성해도 반드시 존재하며 유일한 파일입니다. C나 Java와 다르게 'xml'파일로 되어 있다는 점도 특이하죠. 마크업 랭귀지를 설명하고자 하는 강좌가 아니기에 xml에 대해 깊게 설명드리지는 않겠습니다. 모르시는 분들은 그냥 자바에서 클래스의 객체 생성을 'new 000()'라는 키워드 대신에 '<000 />'또는 '<000></000>'형태의 태그문으로 작성해 놓은 파일이구나 정도로 생각하고 강좌를 보시기 바랍니다. 연산자나 제어문을 가지지 않기 때문에 어떤 동적인 작업은 수행하지 않으며 단순히 보여지는 것들을 만들어 내는 파일이라고 보셔도 됩니다.

       

문자열 객체를 생성하는 방식 

 Java 언어

 xml 언어

 String aaa = new String("문자열입니다");

 <string name="aaa">문자열 입니다</string>

 

 크게 어려운 언어는 아니기 때문에 별도의 학습없이도 두 언어의 문법적 차이만 이해하셔도 앞으로의 예제를 수행하시는데 크게 무리가 없으실 겁니다.

 

 자. 이제 처음 프로세서가 읽어들이는 xml파일을 보겠습니다. 'Package Explorer'의 'Hello'프로젝트 안에서 'AndroidManifest.xml'파일을 선택해 보겠습니다. 아래 그림처리 'AndroidManifest.xml'파일의 열릴 겁니다.

 

 

 

처음 열려지는 모양은 'AndroidManifest.xml'의 내용을 언어적 코딩없이 수정할 수 있도록 마련된 일종의 마법사툴이입니다. 여러분의 편의를 위해서 만들어진 것이죠. 나중에 개발할 때는 사용하더라도 지금은 학습하는 단계이니 원래의 xml언어를 보도록 하겠습니다. 현재 오픈되어 있는 'AndroidManifest.xml'파일의 코드편집창 아래쪽에 보면 여러 tab이 보이실 겁니다. 그 중에 가장 마지막에 있는 xml tab을 클릭하시면 xml로 된 코드를 보실 수 있으십니다.

 

 AndroidManifest.xml

 <?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.andsoft.hello"

    android:versionCode="1"

    android:versionName="1.0" >

 

    <uses-sdk

        android:minSdkVersion="8"

        android:targetSdkVersion="14" />

 

    <application

        android:allowBackup="true"

        android:icon="@drawable/ic_launcher"

        android:label="@string/app_name"

        android:theme="@style/AppTheme" >

        <activity

            android:name="com.andsoft.hello.MainActivity"

            android:label="@string/app_name" >

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />

 

                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

    </application>

 

</manifest>


 

 코드를 처음보면 상당히 어려워 보일 수 도 있지만 형태를 먼저 보면 크게 어렵지 않습니다.

 

첫줄에 나오는 버전과 인코딩 방식은 xml파일마다 있는 것이니 나중에 알아보도록 하고 각 태그문의 내용은 나중에 생각하고 형태만 보면 결국 아래와 같습니다.

 

 <manifest>

      <uses-sdk />

      <application>

              <activity>

............

              </activity>

      </application>

</manifest>

                                                        

 자바에서는 new라는 키워드로 객체를 생성하듯이 xml에서는 <000></000>태그로 객체를 생성한다고 했습니다. 첫 줄에 보이는 <manifest>와 마지막 줄의 </mainfest>가 쌍을 이루고 있는 것이 보입니다. 즉, 가장 먼저 'mainfest'라는 이름의 클래스를 객체로 만들었다고 보시면 됩니다. 자바로 치면 'new manifest()'라고 코딩한 것으로 보면 됩니다. 'mainfest' 라는 이름의 클래스는 처음 보실 겁니다. 여러분이 만든 적도 없는 클래스 이고요. 단순하게 생각하시면 됩니다. 여러분이 자바에서 String 클래스를 만든적은 없지만 이미 java에서 만들어 놨기 때문에 그냥 사용할 수 있었듯이 mainfest라는 클래스도 역시 안드로이드에서 이미 만들어 놓은 클래스 라고 보시면 됩니다. 클래스를 만들때 클래스 안에 다른 클래스의 객체를 만들 수 있듯이 xml도 쌍을 이루는 태그문 안에 다시 태그문으로 다른 객체들을 포함 할 수 있습니다. <uses-sdk />태그도 마찬가지로 객체를 만든 것이고 다만 태그문이 <000></000>쌍으로 되어 있지 않고 <000/> 형태의 단일 태그문일 경우 그 객체 안에 다른 객체를 포함할 수 없다는 것입니다. 'application'객체는 안에 ' activity'객체를 가지고 있는 클래스객체라고 보시면 됩니다. 

 

 

  위 그림처럼 각 역할을 담당하고 있는 클래스 객체 안에 다른 객체가 포함되어 있는 구조라고 보시면 됩니다. 다른 역할이라기 보다는 세부적인 역할 담당이라고 보는 것이 맞을 것 같습니다. 그림의 설명처럼 각 클래스는 각각의 역할을 담당하고 있습니다. 간략한 설명이니 지금 당장 모두 이해하려 하지 말고 편하게 보시기 바랍니다.

 

 태그문의 작성은 자바에서 new 라고 했습니다. 한 줄씩 보면 제일 먼저 mainfest 객체를 생성합니다.

 <manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.andsoft.hello"

    android:versionCode="1"

    android:versionName="1.0" >

          .................

</manifest>

 

 태그문의 '<'와 '>'사이의 값들은 그 클래스의 속성값이라고 보시면 됩니다. 자바로 따지면 클래스의 멤버변수에 값을 주고 있다고 보면 됩니다. 

 

 xmlns(xml namespace) 속성  : xml의 name-space 지정

 xmlns:android="http://schemas.android.com/apk/res/android"

 

  mainfest의 첫번째 속성으로 xml의 네임스페이스를 지정한 것입니다. C++를 학습하신 분들은 들어보셨을 겁니다. '이름영역'이라는 이름이 말해주듯이 어떤 영역을 사용하겠다는 라는 것인데 여기 쓰여진 경로안에 여러분이 사용하시려는 클래스들이 정의되어 있으니 마음껏 가져다 사용해라 라는 것을 설정한 코드입니다. 디테일한 설명은 추후 기회가 되었을 때 설명하도록 하고 자동으로 작성되어 있는 만큼 이런게 있구나 정도만 보고 넘어가겠습니다.

 

 package attributes : 기본 패키지 지성

 package="com.andsoft.hello"


 두번째 속성은 기본 패키지를 설정하는 속성으로 프로젝트를 생성할 때 가장 먼저 application name을 적을 때 설정했던 패키지가 여기에 쓰여있습니다. 이 속성에서 기본패키지를 변경하는 것은 가능하지만 여기의 코드만 바꾸면 안돼며 Refactor 하셔서 수정 하셔야 합니다. 추후에 보도록 하겠습니다. 아래 나오겠지만 액티비티 명을 설정할 때 원래는 패키지명까지 모두 작성해야 하지만 기본패키지 안에 만들어져 있다면 생략이 가능합니다. 자바 소스파일을 만들때 의 기본 패키지값을 설정한 속성이라고 보면 됩니다.

 

 versionCode / versionName attributes 어플의 버전관리를 위한 속성 ( 마켓에 등록 할 때 필요)

 android:versionCode="1"

 android:versionName="1.0"


 세번째 속성은 여러분이 제작한 어플을 마켓을 등록할 때 필요한 속성으로 어플의 버전을 설정한 것입니다. 출시되어 있는 어플 중에서 베타버전이니 하는 것을 보신적이 있으실 겁니다. 구글 플레이 마켓에서는 이 버전 코드를 보고 등재하려는 어플이 기존의 어플을 버전업한것인지 신규 어플인지 구분하게 됩니다. 같은 이름의 어플(정확히는 apk)이 등재되더라도 버전 코드가 같다면 다른 어플로 인지되어 따로따로 등재됩니다. 만약 같은 이름의 어플을 등재하면서 버전코드를 달리하면 기존 어플의 위치에 새로 업로드된 어플이 등재됩니다. 버전관련 속성이 두개로 구분되어 있는데요 'versionCode' 가 중요한 속성으로 정수형 숫자로 1,2,3,4.....순으로 버전을 구분해 줍니다. 여러분이 처음 이 속성을 '1'로 어플을 등재하고 버전업을 하시고자 한다면 새로만든 어플은 이 속성을 '2'라고 쓰시면 됩니다. 번호를 증가하면서 계속 버전업 하는 방식이죠. 'versionName'은 가독성을 위한 것으로서 사용자들에게 보여지는 버전 이름 입니다. 1,2,3,4...식의 단순 숫자 버전이 아니라 버전 '1.1','1.2' 또는 'alpha', 'beta' 이런 식으로 우리가 의미를 이해하기 쉬운 버전의 이름을 문자열로 부여하는 속성입니다. 안드로이드도 '아이스크림 샌드위치'라는 버전 이름이 있지만 실제 API의 버전이름은 '14'버전인 것 처럼 사용자가 구분하기 쉽게 하기 위한 버전의 닉네임 같은 것입니다. 실제 중요한 버전값은 'versionCode'입니다. 다음을 보겠습니다.

 

 현재 만들어져 있는 mainfest는 객체안에 이 어플을 구동하기 위한 최소버전과 타겟버전을 멤버변수로 가지고 있지 않고 따로이 이 값들을 관리하는 객체를 별로도 두고 관리하고 있습니다. 예전에 사용하던 스마트폰(프로요버전같이)에서 새로나운 어플이 실행이 안되는 경우가 있죠. 바로 이 객체의 속성값에 의해 결정되는 것인데요. 내가 만들고 있는 이 어플을 구동할 수 있는 최소한의 버전과 타겟 버전을 설정하는 것입니다. 이름 그대로 'uses-sdk' 객체 입니다. 이 버전의 sdk를 사용하겠다라고 읽어지네요. 

 

 uses-sdk : 어플이 동작하는 환경의 API Level을 정의하는 것으로 최소버전과 타겟버전을 지정한다.

 <uses-sdk

        android:minSdkVersion="8"

        android:targetSdkVersion="14" />


 두가지 속성 모두 이름에서 의미를 잘 보여주고 있습니다. 첫번째 보이는 'minSdkVersion' 속성은 이 어플이 구동될 수 있는 'minimum', 즉, 최소한 'API 8'버전 이상의 안드로이드 폰에서만 구동된다라는 속성값입니다. 'targetSdkVersion'값은 이 어플은 기본적으로 'API 14' 버전을 타겟으로 구동된다는 것으로 이 속성값의 에뮬레이터가 구동됩니다. 인터넷에서 곰플레이어와 같은 프로그램을 다운받아 설치할 때 설치할 수 있는 운영체제 버전이 있는 것과 같은 원리입니다. 프로젝트를 생성할 때 처음 단계에서 입력했던 값이 여기 쓰여지며 이 곳에서 속성값을 변경할 수 있습니다. 'minSdkVersion'이 작으면 모든 스마트폰에서 구동 될 수 있으니 더 좋겠다고 생각될 수도 있으나 안드로이드에서 API를 버전 업하면서 만들어 준 좋은 클래스들을 사용 못하는 경우가 있으니 적절히 선택하시는게 좋습니다. 강좌를 학습하시다보면 이 의미를 차츰 알게 되실 겁니다. 조급해 하지 마세요.

 

다음은 'application' 객체 입니다. 

 <application

        android:allowBackup="true"

        android:icon="@drawable/ic_launcher"

        android:label="@string/app_name"

        android:theme="@style/AppTheme" >

        

        ....................................................

 

    </application>

 

이름 처럼 우리가 만들 어플의 실질적인 관리 객체입니다. 'manifest'객체는 어플의 동작이나 내용은 관리하지 않고 버전이나 sdk사용 허가 등과 같은 대외적인 업무를 담당하는 객체였다면 application은 실제 어플의 동작과 구성을 담당하고 관리하는 객체입니다. 

 

 설정되어 있는 속성을 살펴보겠습니다.

 

 allowBackup : 어플이 시스템의 백업/복구 정책을 사용할 것인지를 설정하는 속성으로 기본값은 'true'

 android:allowBackup="true"

 

 


 icon : 어플이 스마트폰에 설치되었을때 보여지는 아이콘을 설정합니다.

 android:icon="@drawable/ic_launcher"

 

 여기서 속성에 지정한 값을 주의깊게 볼 필요가 있습니다. 지정한 값이 '@'문자로 시작하는데요. xml에서 '@'기호는 이 xml파일 말고 다른곳에 있는 Data를 지정할 때 사용하는 것인데요. 안드로이드에서는 '@'으로 시작하면 프로젝트 폴더 안에 있는 'res 폴더'를 지칭한다고 보시면 됩니다. (자바코드를 설명할 때 추가로 설명드리겠습니다. 지금은 그냥 이렇게만 이해해 주시기 바랍니다.)

 

 'Package Explorer'에서 'Hello'프로젝트의 'res'폴더를 선택하시면 하위 폴더들이 보여집니다.


   

 'res 폴더'의 하위에 많은 폴더들이 보이실텐데 리소스의 타입(이미지,음원,동영상,문자열 등)에 따라 구분지어져 관리되고 있습니다. 폴더 명은 정해진 것이며 변경하시면 안됩니다. 

 

 리소스 타입별 폴더

ㆍdrawable : 사진이나 그림같은 이미지파일이 위치 (.png, .jpg, .bmp등)

ㆍlayout : 화면에 보여지는 View들을 어떻게 배치할 것인지에 대한 배치설계도 같은 xml 파일이 위치 ( .xml)

ㆍmenu : 메뉴버튼이 눌려졌을 때 보여지는 menu의 설계도 파일이 위치( .xml )

ㆍvalues : 문자열(안드로이드에서는 화면에 보이는 문자열을 직접 쓰기 보다 별도로 리소스로 관리하는 것을 권장함), 스타일등의 파일 

 

'drawable'과 'values' 폴더의 경우 '-'과 더불어 여러 폴더로 나뉘어져 관리되는데 어차피 안드로이드는 이 중 하나의 폴더만 사용합니다. 여러개의 폴더가 있는 이유는 사용자의 스마트폰마다 크기나 해상도, 버전이 다르기 때문입니다. 만약 사용자의 스마트폰이 'hdpi'의 해상도를 가지고 있다면 'darwable'폴더 중에서 '-hdpi'폴더 안의 리소스를 선택하게 됩니다. 자동으로요. 각 해상도 마다 알아서 해당하는 해상도의 'drawable'폴더을 찾아서 리소스를 사용합니다. 만약 해당하는 해상도안에 리소스파일이 없으면 다른 폴더에서 찾아서 보여줍니다. 즉, 어차피 안드로이드의 입장에서는 'drawable'의 여러 구분 폴더들과 상관없이 하나의 폴더로 보고 사용하고 있다는 것 입니다. 해상도가 다른 스마트폰에서는 본인 해상도에 맞게 자동으로 조정해 주는데 이때 다소 이미지의 퀄리티가 저하되기 때문에 가급적 각 해상도마다 이미지를 만들어 놓는 것이 좋습니다.(기본으로 만들어진 프로젝트에도 아이콘으로 사용하는 이미지(ic_launcher.png)가 있는데 각 해상도별도 같은 그림이지만 크기가 다른 파일이 위치한 것을 확인할 수 있습니다.) 본 강좌에서는 각 해상도별로 이미지파일을 만들기 번거롭기에 타겟으로 사용하고 있는 에뮬레이터의 해상도(hdpi)를 기준으로 'drawable-hdpi'폴더에만 이미지를 위치하도록 하겠습니다.

 

 다시 'icon'속성의 값을 보면 '@drawble/'로 되어있죠. 예상할 수 있듯이 '@'은 'res'폴더를 말하고 있으니 'res'폴더 아래 'drawable'폴더를 지칭한다는 것을 알 수 있죠. 'ic_launcher'는 딱 봐도 'drawable'폴더 안에 있는 png 그림 파일 임을 직감할 수 있습니다. 사실 이 설명은 이해를 돕기 위한 것인데 '@drawable/ic_launcher'가 마치 파일경로를 작성한 것 같아 보이지만 그런 건 아닙니다. 이에 대한 설명은 자바 코드에서 다시 설명할 예정입니다.

 

 

 

 label : 어플이 스마트폰에 설치되었을때 보여지는 이름을 설정합니다.

 android:label="@string/app_name"

 

 아이콘이 지정되었으니 아이콘 및에 보여지는 어플이름을 설정해야 겠죠. 문자열로 값을 입력하면 됩니다. 이 속성의 값으로 "aaa"라고 쓰면 어플이름이 'aaa'로 보여지는 겁니다. 우리가 실행시킨 어플은 'Hello'라는 이름으로 되어 있습니다. 그런데 이 속성의 값은 'Hello'가 아니네요? 위에서 잠시 설명했지만 안드로이드에서는 문자열도 하나의 리소스(자원)으로 보고 있고 그렇게 사용하길 권장합니다. 나중에 디비깅이나 관리가 용이하기 때문이죠. 물론 그냥 ' android:label="Hello" ' 라고 써도 같은 결과를 볼 수 있습니다. 만약 직접 문자열을 쓰면 노란색 줄이 가면서 리소스형태로 사용하도록 요구할 겁니다. 동작에는 아무런 영향을 주지 않으니 신경쓰지 않으셔도 됩니다. 말 그대로 권장사항입니다. 그럼 '@string/app_name'값이 어떻게 'Hello'라는 글씨로 보일까요. 위에 아이콘지정 방식과 같으니 한번 알아볼겸 따라가 보죠. '@'으로 시작하니 'res'폴더를 의미하고 '@string/'이니까 'string'이라는 폴더가 있겠구나. 하고 보니 'string'이라는 폴더가 보이지 않습니다. 안드로이드에서는 스타일,치수,문자열 같은 값은 'values'라는 폴더에 각 이름에 해당하는 xml파일을 만들어 놓았습니다. 'values'폴더안에 'strings.xml'이 보이실 겁니다. 아무리 봐도 'res'폴더안에 string은 여기 밖에 없으니 '@string/'가 이 파일을 지칭하고 있다는 것을 알수 있겠죠. 이름처럼 '문자열들'을 모아놓은 파일이라고 보시면 됩니다. 이 파일을 선택해서 열어보겠습니다.

 

 strings.xml

 <?xml version="1.0" encoding="utf-8"?>

<resources>

 

    <string name="app_name">Hello</string>

    <string name="action_settings">Settings</string>

    <string name="hello_world">Hello world!</string>

 

</resources>

 

필요한 부분만 설명드리겠습니다. 앞에서 xml과 java에서 문자열 객체를 생성하는 문법적 차이를 설명했었죠. 보시고 해석이 되시나요?

       

 Java 언어

 xml 언어

 String app_name = new String("Hello");

 String action_settings=new String("Settings");

 String hello_world=new String("Hello world!");

 <string name="app_name">Hello</string>

 <string name="action_settings">Settings</string>

 <string name="hello_world">Hello world!</string>

 

 이 파일은 3개의 문자열 객체를 만들고 있으며 각 각 이름과 값이 주어져 있다는 것을 알 수 있습니다.  '@string/app_name' 설정값은 저 3개의 문자열 객체중에서 첫 번째 객체를 지칭하고 있다는 것을 알 수 있으며 'app_name' 문자열 객체의 데이터가 "Hello"인 것을 확인 할 수 있습니다. 즉, 저 xml의 값을  '<string name="app_name">헬로우</string>'라고 한글로 바꾸면 어플이름이 한글로 바뀌게 되는 것입니다.

 

 theme : 어플화면의 기본적인 테마를 지정합니다. 

 android:theme="@style/AppTheme" 

 

 테마는 강좌를 진행하면서 설명하고자 합니다. 지금은 기본테마로 하얀색 바탕화면을 가지고 검정색 바탕의 제목표시줄과 액션바가 보여지는 테마라고만 생각하시기 바랍니다.

 

 지금까지 설명드린 'application' 객체는 본인 안에 어플을 구성하는 4가지 컴포넌트(구성요소) 객체를 가질 수 있습니다.

 

 어플을 구성하는 4대 컴포넌트 클래스

ㆍActivity : 화면 인터페이스를 담당하는 클래스. 화면에 무엇인가를 보여주려면 이 클래스를 상속받아 구현합니다.

ㆍService : 화면에 보이지는 않지만 백그라운드에서 동작하고 싶은 작업이 있다면 이 클래스를 상속받아 구현합니다. (mp3 플레이어)

ㆍBroadcast Receiver : 네트워크의 상태변화나 문자수신 등 스마트폰의 변경내역 수신을 담당하는 클래스. 

ㆍContent Provider : 다른 어플과의 Data 전달을 담당하는 클래스. 

 

위 Component 클래스는 어플제작과정에서 매우 중요한 역할을 담당하고 있으니 시간을 두고 다시 설명드릴 예정입니다. 모든 어플은 위 4가지 컴포넌트 중에 하나는 반드시 사용하게 됩니다. 반드시 4개다 다 사용되야 하는 것은 아닙니다. 일반적인 어플을 개발한다면 화면에 무엇인가 보여주는 내용이 없을 수 없으니 화면을 담당하는 'Activity' 는 반드시 포함되어 있습니다. Activity는 한번에 하나의 화면만을 담당하고 있기때문에 여러페이지의 화면으로 이루어진 어플을 제작할 경우에는 Activity 클래스가 여러개 존재하게 됩니다. 현재는 화면에 간단하게 'Text'하나만 보여주는 어플이기 때문에 Activity가 하나 포함되어 있습니다. 위 4대 컴포넌트는 반드시 'AndroidManifest.xml'에 사용한다는 것을 등록해 주어야 합니다. 다른 클래스파일들은 src폴더에 만들어서 사용하기만 하면 되지만 4대 컴포넌트들은 소스파일을 만들고 이곳에 반드시 작성해 두어야 합니다. 지금은 이해가 어려울 수 있으니 그렇구나 정도만 이해하고 넘어가셔도 됩니다.

 

 코드를 보면 'application'안에 'Activity'가 하나 있는 것을 볼 수 있습니다.

<activity

      android:name="com.andsoft.hello.MainActivity"

      android:label="@string/app_name" >

      <intent-filter>

           <action android:name="android.intent.action.MAIN" />

           <category android:name="android.intent.category.LAUNCHER" />

      </intent-filter>

</activity>

 

앞에서 언급했듯이 하나의 application안에 여러 페이지의 화면이 구성되어 있을 수 있습니다. 그럴 경우 이 영역에 다른 'activity'들을 작성해 놓아야 합니다. 만약 페이지가 3개로 구성된 어플의 경우는 아래와 같은 형태로 작성해야 합니다. 

 <activity android:name="com.andsoft.hello.MainActivity" >

 </activity> 

 

<activity android:name="com.andsoft.hello.SecondActivity" >

 </activity> 

 

<activity android:name="com.andsoft.hello.ThirdActivity" >

 </activity> 

 

여러 페이지의 Activity 구성은 나중에 소개하도록 하겠습니다.

 

현재 우리의 'Hello'프로젝트 안에는 하나의 Activity가 있습니다.  Activity의 속성을 살펴보겠습니다.

 name : Activity 클래스를 상속받은 클래스의 이름을 패키지명과 함께 지정합니다.

 android:name="com.andsoft.hello.MainActivity"

 

 Activity가 여러개 있을 수 있다고 했죠? 당연히 각 Activity들을 구별하기 위한 이름이 필요합니다. 그 속성이라고 보시면 됩니다. 위에 여러 액티비티의 작성 예에서 보시면 각 Activity마다 이름이 다른 것을 보실 수 있습니다.

 

 현재 name 속성의 값을 보면 'com.andsoft.hello.MainActivity' 로 되어있죠. 이전 강좌에서 살펴보았던 'MainActivity.java' 소스파일이 기억나십니까?

 

 MainActivity.java

 public class MainActivity extends Activity{

         ...........................

}

 

이 자바파일안에 있는 클래스의 이름을 속성값으로 부여한 것입니다. xml에서는 <000></000>태그문으로 000객체를 생성한다는 설명 기억나시나요? 결국 이 태그문에 의해 자바소스파일의'MainActivity'클래스가 객체로 만들어 지는 것입니다. 저번 강좌에서 자바파일에 대해 설명할때 객체를 생성하는 코드가 어디에도 없다고 했었죠? 바로 여기에 있습니다.

반응형
반응형

이전 포스트에서 실행된 프로젝트가 어떻게 구성되어 있고 어떤 코드에 의해 보여지고 있는지 알아보겠습니다.

 

C와 Java만 학습하신 분들은 open 되어 있는 2개의 파일에서 먼저 'Hello world!"라는 글씨를 찾고 계실지도 모릅니다. 하지만 아무리 찾아봐도 화면에 보여지는 'Hello world!"라는 문구가 보이질 않으실 겁니다. 심지어 main() 메소드도 보이질 않아 당황했을지도 모릅니다. 사실 제가 처음 안드로이드를 접했을 때 했던 행동입니다.

 

 우선 알아둘 것은 안드로이드는 C나 Java와 다르게 프로그램의 시작점인 main() Method가 없습니다.

"뭐야!? 그럼 어디서부터 시작이야?? 그냥 자바 소스파일이 하나니까 그것 부터 시작하나??" 그럴리가 없겠죠. 우선 이런 구조적인 흐름에 대한 생각은 접어두고 화면에 글씨가 보여지는 주요 코딩부분만 알아보겠습니다. 나머진 차차 설명드리겠습니다.

 

 우선 아래 그림처럼 Package Explorer에 'Hello'라는 이름의 프로젝트가 보입니다. 안에 엄청 많은 폴더와 파일들이 보이죠. 심지어 자바로 안드로이드 프로그래밍을 한다면서 java파일만 있는 것도 아니고요. 답답해 집니다. 해결해 보죠.

 

 

 프로젝트 구성파일에 대한 설명은 잠시 뒤에 하고 open되어 있는 파일 2개를 통해 화면에 보여지는 과정을 알아보겠습니다.

 

지속적으로 언급했듯이 안드로이드 어플은 Java언어로 개발합니다. 당연히 java 소스파일의 코드 내용으로 동작하게 되어있죠. 저는 보통 프로그램을 처음 공부하는 친구들에게 이렇게 코드를 이렇게 해석하도록 유도합니다. 

 

"프로그램을 만든다는 것은 요리로 비유하면 레시피를 만드는 것이다. 즉, 본인이 어떤 음식을 완성하는 순서를 글로 써놓는 것이다. 프로그램을 실행시키는 컴퓨터는 단순한 요리사다. 이 요리사는 만드는 능력은 좋은데 창조는 못한다. 그리고 중요한 것. 한번에 두가지 작업을 하지 못한다. 그렇기 때문에 레시피는 요리를 만드는 순서대로 반드시 작성되어 있어야 한다. 심지어 냄비와 칼을 준비해야 한다는 것도 써놓아야 한다. 냄비에 물을 넣으라고 쓰고 다음줄에 냄비를 준비하라 라고 쓰면 안된다. 요리사(컴퓨터)는 무조건 순서대로 진행한다."

 

 프로그램을 좀더 깊이있게 학습하면 위에 소개한 '단순한 요리사'가 아닌 멀티플레이어 요리사(?)를 만나게 되는데 그건 나중에 소개하고 우선 처음 코드를 접할때는 위의 방법으로 설명합니다. 여기도 마찬가지 입니다. 아직 설명 못한 부분이 많지만 우선 보이는 java 소스파일은 하나이니 어떻게 시작되는 건지는 모르겠지만 이 소스파일이 실행된다는 것은 유추할 수 있겠죠. 

 

Open되어 있는 'MainActivity.java'를 보겠습니다.

package com.andsoft.hello;

 

import android.os.Bundle;

import android.app.Activity;

import android.view.Menu;

 

public class MainActivity extends Activity {

 

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

    }

 

 

    @Override

    public boolean onCreateOptionsMenu(Menu menu) {

        // Inflate the menu; this adds items to the action bar if it is present.

        getMenuInflater().inflate(R.menu.main, menu);

        return true;

    }

    

}

 

 알수없는 코드들로 보이실지 모르겠지만 새로운 명령어를 배우는게 아닙니다. 위 코드는 java언어로 작성된 것입니다. 당연히 Java언어의 문법 규칙을 따르고 있습니다. 가끔 강의를 하다보면 Java를 학습한 친구가 안드로이의 문법을 모르겠다고 말하는 경우가 있습니다. 물론 구조나 원리는 아직 배워야 하지만 실제 어플의 동작을 결정하는 코드의 작성은 자바와 문법적 차이가 없습니다. 아니 그냥 자바 문법입니다. 자바를 어느정도 아시는 분이 지금 이 코드를 보고 해석을 못하는 것은 문법을 몰라서가 아니라 사용되어지고 있는 클래스들과 메소드들을 몰라서 입니다. 즉, 레고 블럭을 만들때 네모모양이나 세모 모양의 블럭만 가지고 만들어 봤는데 동그란 모양의 블럭이 내 앞에 있는 겁니다. 어떻게 쓰는지 모르겠죠. 하지만 한두번만 사용된 예를 보여주면 어렵지 않게 여러곳에 사용할 수 있습니다. 중요한 건 레고 블럭은 아무리 다양한 모양이 있어도 조립하는 방식은 같다는 것이죠. 그래서 남녀노소 누구나 기본적인 블럭 조립방법만 익히면 새로운 모양의 블럭을 만나도 용도만 알면 조립할 수 있다는 것이죠. 자바가 대표적으로 이런 구조로 되어있죠(정확히는 OOP). 위 코드를 보면 클래스나 메소드의 이름들은 생소하지만 코딩 방식은 자바로 개발할 때와 같다는 것이죠.  

 

 세부적인 것은 차후에 설명드리고 우선 MainActivity라는 이름의 클래스가 선언되어 있다는 것을 알 수있습니다. 일단 코드 전체에 클래스가 이거 하나 선언되어 있으니까 이 클래스가 객체로 만들어 져서 화면에 글씨를 출력한다는 것을 유출할 수 있습니다.

 

 public class MainActivity extends Activity{

....

}

 

 클래스의 선언부에 extends가 들어간 걸로 봐서 Activity라는 클래스를 상속해서 클래스를 만들고 있다는 것을 알수 있습니다. 나중에 설명드리겠지만 바로 이 상속받은 'Activity' 클래스가 화면출력을 담당하고 있는 클래스 입니다. 이 클래스를 상속 받음으로서 화면에 무엇인가를 보여주기 위한 수 많은 준비 코드를 생략할 수 있는 것이죠. 우리는 어떤 방법으로 화면에 보여지는 가는 고민할 필요없이 그냥 무엇을 보여줄까만 고민하면 되도록 만들어 놓은 클래스입니다. 자세한 설명은 다음에 다시 하도록 하겠습니다. 

 

 @Override

    protected void onCreate(Bundle savedInstanceState) {

......

    }

 

@Override

    public boolean onCreateOptionsMenu(Menu menu) {

.......

    }

 

 클래스 안에 두개의 메소드가 보이며 '@Override'가 보이는 걸 보면 이 두개의 메소드는 상속받아 온 Activity 클래스의 메소드라는 것을 알 수 있습니다. 메소드의 이름만으로도 대충 역할을 짐작할 수 있겠죠. onCreate() 메소드는 '만들어 질때' 라는 의미니까 이 메소드는 화면이 만들어질때 호출되는 메소드라는 것으로 유추해 봄직 합니다. 메소드명이 'on'으로 시작되는 메소드는 대부분 callback 메소드인 경우가 많습니다. callback 메소드는 일반 메소드와 다르게 여러분이 호출을 하는 것이 아니라 운영체제 즉, 안드로이드가 어떤 상황이 되었을때 호출하는 것을 말합니다. 자바 학습을 충실히 하셨다면 아시리라 생각됩니다. 안드로이드에서는 이 callback 메소드의 활용이 무엇보다 중요합니다. 앞으로 배우게 되겠지만 가물가물 한 분은 다시한번 시간을 들여 callback에 대한 정리해보시기 바랍니다.

 결국 이 메소드가 어플이 실행되고 화면이 만들어지면 호출되니까 이 메소드 안에 보여질 내용물을 작성해 놓았겠구나. 라고 생각하실 수 있다면 센스 만점입니다. 정답입니다. 이 메소드 안에 보여질 내용물을 결정하여 MainActivity 클래스에게 설정해 주면 됩니다.

 

 @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState); // 부모클래스의 메소드를 호출하는 것이니까 우선 패스

        setContentView(R.layout.activity_main); // 보여질 내용물(뷰)을 설정

    }

 

 이 메소드의 매개변수는 나중에 다시 하겠습니다. 저 객체의 역할은 갑작스럽게 화면이 종료되었을 때 이전 상태를 저장하고 있는 녀석이다 정도로만 이해하시고 넘어가겠습니다. 여러분이 엑셀에서 어떤 작업을 하다가 갑자기 다운되었을 때 다시 실행시키면 마지막 상태가 자동으로 저장되어 보여지는 경우가 있죠. 그런 역할을 저 매개변수가 한다 정도로 이해하기시 바랍니다. 결국 이 메소드안에서 super를 이용하여 부모클래스의 메소드에게 매개변수를 전달하는 부분을 제외하면 딱 하나의 메소드 호출문만 있는 겁니다.

 

 코드를 보면 'setContentView()'라는 메소드를 호출하고 있고 매개변수로 'R.layout.activity_main'을 전달하고 있다는 것을 알 수 있습니다. 중요한건 저 'setContentView()'라는 메소드를 우리는 만든 적이 없다는 것이죠. 그렇다는 것은 이 메소드가 부모 클래스의 메소드라는 것이고 자식 클래스는 부모클래스의 멤버를 마음대로 사용할 수 있으니 'setContentView()'를 만들지 않고 사용하고 있다는 것을 확인할 수 있습니다. 이 'setContentView()'메소드가 어떤 역할을 하는지 배운적은 없지만 이름만으로도 유추가 어느정도 가능하리라 봅니다. 대부분의 API들에서 제공하고 있는 클래스들은 변수명이나 메소드명 만으로 그 의미나 역할을 짐작할 수 있도록 명명하고 있습니다. 그럼 유추해 보죠. 먼저 'set'으로 시작하고 있으니 뭔가를 설정한다는 것이고 'Content'라는 단어는 내용물이고 'View'는 보이는 것 또는 보여지는 것이니까. 종합해 보면 액티비티가 화면 출력을 담당하고 있는 클래스이니까 이 클래스에게 명령을 내리고 있는 것이네요. "화면에 보여지는 내용물을 설정하겠다. 그 내용물은 매개변수로 전달하겠다." 라고 해석할 수 있을 것 같습니다. 안드로이드에서 화면에 무엇인가를 보여줄 때 반드시 알고 있어야 하는 클래스가 Activity와 View입니다. 나중에 다시 설명하겠지만 안드로이드에서 View라는 용어는 화면에 보여지는 어떤 것(이미지,텍스트,버튼 등)을 지칭합니다. 우리가 인테리어를 할 때 벽에 액자를 걸거나 벽장을 설치 했다고 했을 때 벽을 액티비티 즉, 화면이라고 보면 장식되어 있는 액자나 벽장 또는 화분 같은 것들을 뷰라고 합니다. 다음 강좌에서 다시 보기로 하고 일단 이 메소드가 결과적으로 화면에 글씨를 보여주게 하는 결정적인 메소드라는 것을 알 수 있습니다. 가장 중요하고 기본적인 메소드라고 할 수 있겠죠. 전체적으로 종합해보면 프로젝트가 실행되면 당연히 화면에 무엇이든 보여야 하니까 화면출력을 담당하는 액티비티 클래스의 객체가 만들어 질 것이고 이 객체가 화면을 만들 때 'onCreate()'라는 메소드가 호출되며 이 메소드 안에서 'setContentView()'메소드를 호출 함으로서 화면에 보여질 내용물이 정해진다는 흐름을 해석할 수 있었습니다. 

 

 그럼 화면에 보여지는 내용물은 무엇일까요? 

'setContentView()'메소드의 매개변수를 전달한 'R.layout.activity_main'이라는 코드가 무엇인가? 이에 대한 설명은 다음에 하고 뭔지는 모르겠지만 이름을 보니 어디서 본 적이 있는 것같습니다.

 

 처음 프로젝트를 만들었을 때 자동으로 open되어 있던 파일이 2개 였던거 기억하시죠? 우린 그 중에 'MainActivity.java' 파일을 보고 있었죠. 이 파일 말고 옆에 열려있는 'activity_main.xml'파일이 보이시나요? 예전 버전에서는 이 파일만 open해줬었습니다. 

 

아무튼 'setContentView()'메소드의 매개변수를 전달한 'R.layout.activity_main' 코드가 이 xml파일을 의미하고 있다고 유출할 수 있습니다. 단지 표시 방식이 파일이름과 확장자가 아니라서 이상해 보일 수 도 있는데요. 이건 나중에 다시 설명드리죠. 잘은 모르겠지만 화면에 보여질 내용물르 설정하라는 'setContentView()'메소드에게 이 파일을 전달했으니 화면에 'Hello world!'라는 글씨는 이 xml파일 안에 써져 있는 것 같습니다. 그럼 'activity_main.xml'을 보겠습니다. 파일을 선택하시면 아래 그림처럼 애뮬레이터의 화면에 보여졌던 모습과 같은 모양의 화면이 보여집니다.

 

 

 "아! 결과적으로 이 xml파일에서 만든 화면이 어플이 실행 되었을때 보여지는 화면이구나." 라고 이해하시면 됩니다.

 

처음 프로젝트를 생성했을 때 이 2개의 파일을 open해 주는 것도 이 2개가 여러분들이 화면에 무엇인가를 보여줄 때 건드려야 하는 파일들이기 때문입니다. 우선은 우리가 생성한 프로젝트가 이런 코드들에 의해 실행 되고 있다는 정도만 설명 드렸습니다.

 

 우리는 아직 프로젝트안에 있는 저 많은 파일들에 대해 알지 못하며 프로그램이 실행될 때 가장 중요한 시작점도 역시 알지 못하고 있습니다. 자바를 어느정도 알고 있으신 분들은 저 자바파일만 보면 더더욱 혼란스러울 수도 있습니다. 우리가 본 'MainActivity.java' 소스파일은 그 어디에도 MainActivity Class를 객체로 만들지 않고 있다는 것이죠. 클래스를 아무리 잘 만들어도 객체를 만들지 않으면 의미가 없죠. 

 

 자. 이제 본격적으로 안드로이드 프로젝트에 대해 알아봐야겠죠. 다음 포스트에서 뵙겠습니다.

반응형
반응형

 이전 포스트를 통해 프로젝트를 생성하셨다면 아래와 같은 그림이 보이실 겁니다.

 

 

 처음 시작하시면 프로젝트 생성과정에서 만들었던 java 소스파일과 xml 리소스 파일이 자동으로 열려있으실 겁니다. 센스 있으신 분들은 이클립스가 자동으로 이 2개의 파일을 open한 상태로 보여주는 것 만 보고도 예상할 수 있으실 겁니다. 맞습니다. 이 2개의 파일이 지금 만들고 있는 어플의 화면 출력을 담당하고 있는 주요 파일입니다. Package Explorer에 보이는 저 많은 파일 중에서 이 2개의 파일을 수정하면 여러분만의 어플을 만들 수 있다는 것이지요. 물론 단순히 text를 보여주고 끝나는 어플은 없겠죠. 이 2개의 파일만가지고 만들어진 어플은 없습니다. 앞으로 배워야 할 것들이 많겠죠. 차근차근 알아보기로 하죠.

 

 우선 현재 만들어진 프로젝트는 이미 화면에 'Hello world!'라는 Text를 출력해주도록 프로그래밍 되어 있습니다. 어느 어플을 만들던지 90%는 이 상태에서 시작합니다. "어?! 난 글씨말고 이미지를 출력할건데...미리 텍스트를 출력하도록 프로그래밍 하면 어쩌라고???"라고 생각하실지도 모르겠네요. 좀더 추가적으로 설명하자면 자동으로 만들어진 프로젝트는 Text의 출력이 목적이 아니라 스마트폰의 화면에 무엇인가 보여질 것들을 출력할 수 있도록 일종의 연결작업을 준비 해 준 것이라고 생각하시면 됩니다. 현재 잘 연결되어 있다는 것을 보여주기 위한 예시로 Text 하나를 출력하도록 되어 있을 뿐입니다. 당연히 Text 를 이미지로만 바꾸면 화면에 원하는 그림이 보여질 겁니다. 아직 구조를 설명하지 않아 이해가 쉽지 않으니 이제부터 구조를 파악해 보죠.

 

 먼저 Package Explorer에 보이는 수 많은 파일들은 각 각 담당하고 있는 영역별로 분리되어 프로그래밍 되어 있습니다. 저 파일들이 각자 어떤 역할을 하는지를 알려면 우선 결과가 어떻게 되는지를 봐야 알기 쉬우니 먼저 실행을 시켜보도록 하겠습니다. 앞에서 언급했듯이 현재 만들어진 프로젝트는 이미 Text하나를 출력하도록 프로그래밍 되어 있습니다. C나 Java에서 콘솔출력 프로그래밍을 하실 때는 우선 메인함수를 만들고 그 안에 글씨를 출력하기 위해 printf()나 System.out.println()같은 메소드를 작성해 주셔야 했습니다. 안드로이드는 이미 이 단계까지 프로그래밍 되서 만들어 집니다. 즉, 단 한줄의 코드 입력 없이 단순하지만 스마트폰에서 동작되는(Text 하나 출력) 어플을 하나 만드신 겁니다. 단지 마우스 클릭 몇번으로..

 

 자. 그럼 실행을 한번 시켜보시죠. 스마트폰을 바로 연결하셔도 되고 애뮬레이터를 실행시켜도 됩니다. 전 보여줘야 하니 답답하지만 애뮬레이터로 실행하겠습니다.

 

 실행 방법은 Java와 다르지 않습니다. eclipse에서 run 버튼을 누르시면 됩니다. 

 

아래와 같이 어떤 방법으로 'Hello'라는 이름의 프로젝트를 실행할 것인가 물어보는 팝업이 보여집니다.


 

eclipse를 사용하신 분들은 모두 알고 게시겠죠. 각 프로젝트마다 처음 run을 할때만 보여지고 이후 부터는 보여지지 않습니다.

당연히 'Android Application'을 선택하시면 'OK'버튼이 활성화 됩니다. 

 

 만약 코드를 수정하고 저장 되지 않은 파일들이 있다면 수정된  내용으로 저장할지를 물어보는 창이 보여집니다. 'Yes'를 선택하시면 실행이 됩니다. 물론 우리는 코드를 단 한 글자도 수정하지 않았으니 저장여부에 대한 확인 창 없이 바로 실행됩니다.

 

 여러분이 프로젝트를 생성할 때 선택했던 Target Version에 해당하는 애뮬레이터가 자동으로 실행됩니다. 애뮬레이터를 만드는 것은 다른 강좌나 인터넷을 통해 알아보시기 바랍니다. 본 강좌의 목적과 다소 차이가 있어서 나중에 부록으로 포스팅하고자 합니다. 지금 설명하는 이 단계도 그냥 확 건너뛸까 하다가 구조를 이해하는 부분이라서 다루고 가는 겁니다. 이 점 양해바랍니다.

 

 우린 앞에서 선택 했듯이 Google(api14)버전의 애뮬레이터로 진행 할 겁니다. 

 

 애뮬레이터는 처음 만들어지는데 오래 걸리죠. 잠시 담배나 한대 피고..올..정도까지는 아니구요. 컴퓨터 성능에 따라 다르겠죠.

애뮬레이터가 처음에 늦게 만들어 지는 것은 어쩔 수 없습니다. 이미 다른 강좌에서 기초를 익히신 분들은 알 고 있듯이 안드로이드는 Linux 운영체제를 기반으로 만들어 져 있습니다. 당연히 처음에 가상의 Linux운영체제부터 만들어지는 과정이 있어서 오래걸릴 수 밖에 없습니다. 그냥 스마트폰 전원을 킬때 오래 걸리는 것과 같다고 생각하셔도 됩니다. 느리다고 스트레스 받지마세요.

 대신 한번 만들어진 애뮬레이터는 그 날 개발하는 동안은 끄지 마세요. 당연히 개발 과정에서 여러번 실행시키실 텐데 한번 켜 놓으면 그 다음 부터는 켜져있는 애뮬레이터에서 업로드와 인스톨 과정만 진행하면 되기 때문에 빠르게 결과를 보실 수 있습니다.

 좀 더 자세한 내용은 기회가 될 때 포스팅 할 예정입니다.

 

 Android 개발환경을 구축하고 처음 실행시키셨다면 아래와 같은 Log를 보겠느냐 라는 팝업창을 보시게 됩니다.

Log는 디버깅 과정에서 매우 중요한 역할을 담당하니 되도록 기본상태인 'Yes'를 선택하시기 바랍니다. Logcat은  강좌를 진행하면서 소개할 예정입니다. 처음에 한번만 보여지며 이 후 같은 workspace안에 프로젝트를 생성할 경우에는 팝업되지 않습니다. 나중에 언제라도 변경 가능합니다.

 

 자. 잠시 기다리시면 아래와 같이 애뮬레이터가 보여질 겁니다. 버전에 따라 그 모양에도 약간씩 변화를 주고 있습니다.

   

 스마트폰과 같이 하단 중앙에 있는 자물쇠를 오른쪽으로 드래그 하시면 잠금상태가 해제됩니다.

잠금이 해제되면서 오른쪽 그림처럼 우리가 만든 프로젝트의 실행 결과가 보여집니다. 스마트폰에서도 역시 오른쪽 Control Button 영역을 제외한 화면 영역을 보실 수 있으실 겁니다. 

 

 오른쪽은 되돌아 가기 버튼은 누르시면 홈 화면이 보여집니다.

 

홈 화면에서 하단 중앙에 있는 앱버튼을 누르면 어플 목록이 보여집니다.



 목록을 보시면 여러분들이 실행시킨 'Hello' 어플이 설치 되어 있는 것을 볼 수 있습니다. 한번 인스톨 한 것이니 애뮬레이터의 전원르 껏다 켜도 여전히 설치 되어 있습니다. 실제 스마트폰에 어플 다운받아 설치 했다고 생각하시면 됩니다. 마켓이 아니라 스마트폰의 USB케이블로 다운받아 설치했다고 생각하시면 됩니다. 당연히 설치된 어플을 지우는 것은 애뮬레이터나 스마트폰의 App Manager에서 삭제하시면 됩니다.
      

앞에서 설명드린데로 프로젝트를 생성할 때 선택했던 항목들에 의해 드로이드 인형의 아이콘과 여러분이 기입한 Application Name으로 어플이 설치된 것을 볼 수 있습니다. 이 아이콘과 이름은 설치된 후에도 다시 run시켜서 인스톨시키면 변경이 가능하니까 어플을 다 만들고 변경하셔도 됩니다.

 

 실제로 어플을 실행하듯이 이 아이콘을 클릭하면 어플은 다시 실행됩니다. 이 과정은 인스톨이 아니죠. 그냥 실행입니다. 이클립스에서 run을 하시는 것은 새롭게 업로딩과 인스톨, 그리고 실행까지를 의미하는 것입니다. 실행과정을 구분하시기 바랍니다.

 

 이미 보셨듯이 우리가 만든 프로젝트는 화면에 'Hello world'라는 글씨를 출력하고 있고 제목으로 우리가 입력한 Application Name이 보여지고 있습니다. 그럼 어떻게 이런 화면을 출력할 수 있었는지 프로젝트 파일을 살펴보겠습니다.

 

 이번 포스트가 너무 긴 듯합니다. 다음 포스트에서 이어하도록 하겠습니다.

반응형
반응형

 안드로이드 게임을 만들기에 앞서 안드로이드의 프로젝트를 만드는 방법과 구조를 알아보겠습니다. 원래 본 강좌는 게임을 개발하기 위한 소스만 설명하고자 했지만 안드로이드에 대해 한번도 다루어보지 않은 사람이 있을 수도 있겠다 싶어서 기본 구조만은 설명하고 본격적인 강좌를 시작하고자 합니다. 다시 말씀드리지만 본 강좌는 기초적인 문법 및 구조는 조금이지만 알고 있는 사람들을 기준으로 진행하고자 하였기 때문에 여기서는 아주 간략히만 설명하고자 합니다. 안드로이드 및 프로그래밍 언어를 처음 접해보신 분들은 지금은 그냥 저런게 있구나 정도만 이해하고 따라하시기 바랍니다. 다만, 어느정도 이해가 되야 제 설명을 좀더 정확히 인지할 수 있는 만큼 시간을 들여 다른 안드로이드 강좌도 학습해 보시기바랍니다.

 

 너무 알아서 학습해 와라 하는 식으로 말하는 것 같다고 느끼실수 있는데 사실 프로그래밍 언어를 학습하는 과정은 본인의 능동적 참여가 매우 중요합니다. 단순히 사용하는 문법만 강의한다면 두어개의 포스트로 끝내버릴 수 있을지 모릅니다. 즉, 문법이 많은 것보다는 그 문법을 어떤 순간에 어떻게 활용하는 가가 중요한데 이는 누가 노하우를 알려준다고 쉽게 익혀지는 것이 아닙니다. 정말 센서블한 몇몇 친구들은 아주 짧은 예제만 가지고도 훌륭히 활용하기도 하지만 대부분의 학습자들은 매우 많은 예제를 다루어 봄으로서 노하우 및 알고리즘이 형성됩니다. 실제 강의를 하다보면 한 기수에 한두명 정도 센스가 좋은 친구들을 제외하고 대부분은 활용에 오랜 시간과 노력이 요구되고 있습니다. 그리고 사실 프로그래밍 언어는 시중에 나와있는 책이나 이런 강좌를 통해서 혼자서 충분히 할 수 있습니다. 대신 시간이 오래걸리겠지요. 또 간혹 혼자 공부하다 보면 막히는 부분이 좀처럼 해결되지 않는 경우가 있을 수 있습니다. 그래서 사람들이 시간을 단축시키고 학습을 좀더 효과적이고 체계적으로 하기위해 학원이나 교육기관을 다니는 것이죠. 이것도 좋은 방법입니다. 하지만 제일 중요한 것은 어떤방식으로 학습을 하든 본인의 능동적 학습이 선행되야 좋은 결실을 맺을 수 있다는 것을 명심하시기 바랍니다.

 

  자. 그럼 이제부터 본격적으로 안드로이드 게임 개발을 위한 첫걸음을 걸어보겠습니다.

 

 먼저 앞으로 만들어 볼 프로젝트들을 한곳에 보관하기 위해 workspace 라는 이름의 폴더를 적당한 위치에 만들고 여기에 보관시키도록 Eclipse의 경로를 지정해 주시기 바랍니다. 가급적 경로는 모두 영어이름으로 지정하시기 바랍니다. 구글에서 한글에 대한 지원을 많이 향상시켰지만 가끔 한글 경로로 인한 에러가 발생하기도 합니다. 윈도우의 컴퓨터 이름도 영어로 사용하길 권장합니다.

 

 우선 어느 프로그램을 학습하던 제일 처음 해보는게 화면에 'Hello'라는 글씨가 나오게 하는 것이니까 우선 그것부터 해보겠습니다. 보통 화면 입출력에 대해 많은 개발언어들이 손쉽게 가능하도록 만들어져 있다보니 대수롭지 않게 학습하시는 분들이 있는데 제가 생각하는 프로그램 언어의 학습은 우선 화면 입출력이 내가 원하는 모양으로 나올 수 있게 하는 것이 무엇보다 중요하다고 봅니다. 단순이 따라해 보니까 되는구나. 라고 넘어가시지 말라는 겁니다. 일단 C나 Java를 접해보신 분들은 콘솔창으로 원하는 결과를 출력하는 방식에 익술하실 겁니다. 하지만 안드로이드는 스마트폰에서 구동되어져야 하는 만큼 결과를 보여주는 곳이 콘솔창이면 안되겠죠. 그래서 안드로이드 개발은 결과를 보기위해 스마트폰이 필요합니다. 하지만 스마튼폰이 없을 수도 있고 많은 버전과 크기, 해상도를 가진 스마트폰을 종류별로 구비할 수도 없겠죠. 그래서 여러분들이 다운받아 설치하신 ADT에는 가상의 스마트 폰을 제공해 줍니다. 보통 '애뮬레이터'라고 하죠. 이 애뮬레이터를 버전, 크기, 해상도별로 수십대로 만들 수 있으니 문법도 학습하기 전에 스마트폰 부터 구비하실 필요는 없습니다. 애뮬레이터를 만드는 방법은 다른 강좌를 우선 보시고 따라 하시기바랍니다. 지금 여기서 설명하려면 그림작업때문에 시간적으로 너무 많이 소요되니 기회가 될 때 차후에 다시 포스팅하도록 하겠습니다.

 

 안드로이드 버전은 매년 새롭게 업데이트 되고 있기때문에 그 때 그때 변경하기보다는 하나의 버전을 정하고 그 버전으로만 설명하도록 하겠습니다. 버전이 바뀌더라도 기본적인 구성은 큰 변화가 없으니 크게 신경쓰지 않으셔도 됩니다. 본 강좌에서는 API-14버전으로 예제를 진행하겠습니다. 아이스크림 샌트위치 버전이고요. 현재 가장 많이 분포되어 있는 버전입니다. 조만간 최신버전인 kitket이 더 많아 지겠죠.  우선 API-14버전으로 애뮬레이터를 준비해 주시고 실제 스마트폰을 연결하셔도 좋고요. 아무래도 애뮬에이터는 동작속도가 느리니까 좀 답답하실 수 있습니다. 

 

 자 그럼 이제 시작하죠.

 

 제일 먼저 프로젝트를 만들어야 하니 Eclipse의 메뉴에서 File->new->Android Application Project를 선택합니다.

 


아래와 같이 팝업윈도우가 나오면 프로젝트 이름과 패키지를 지정하시기 바랍니다. C나 java의 경우에는 결과를 콘솔창에 단순하게 텍스트형태로 보여주기 때문에 간단하게 원시파일(ex. aaa.c or aaa.java)만 만들고 컴파일 하면 됬지만 안드로이드 어플개발은 이미 시작부터 결과창이 스마트폰이기에 간단하게 원시파일만 가지고 작동될 수 가 없습니다. 그래서 스마트폰 화면에 결과가 보여지기까지 상당히 많은 양의 프로그램을 해줘야 합니다. 이게 그렇게 간단할 리가 없겠죠. 그래서 개발자가 개발을 쉽게 하도록 하기 위해 기본적인 화면 출력과 환경설정까지는 해주는 프로그램 파일들을 미리 만들어 놨습니다. 이제부터 여러분들이 보시는 팝업윈도우는 이런 프로그램 파일들을 포함한 기본 프로젝트를 만들어 주는 일종의 마법사 입니다. 그래서 프로젝트 생성까지 여러단계가 있죠. 윈도우 프로그램을 해보신 분은 wizard를 아시겠죠. 그 일종이라고 보시면 됩니다. 

 

매년 새롭게 출시되는 버전에 따라 위 모양이 다를 수 있습니다. 모양과 위치를 익히지 말고 항목의 의미를 이해하시면서 항목의 내용을 입력하시기 바랍니다.

 

▣ 각 항목의 의미

ㆍApplication Name : 본인이 제작하고자 하는 어플(App)의 이름 (마켓에 배포할 때의 이름은 다르게 할 수 있습니다. ex. Angry Bird)

ㆍProject Name : 제작하고자 하는 어플의 프로그램파일들이 저장되는 폴더의 이름

ㆍPackage Name  

   - 같은 이름의 어플 이름이 있을 수 있기때문에 구별되기 위한 고유한 명칭(보통 회사 uri를 역으로 작성)

   - 반드시 모두 소문자로만 작성하며 하나 이상의 구분점(.)으로 작성해야 함

     ( 패키지명 사용불가 : abcd (적어도 하나 이상의 구분점이 있어야 함), com.Andorid (대문자 사용) )

   - 보통은 회사uri의 역순표기를 고정해 두고 각 프로젝트마다 프로젝트 이름을 추가하여 구분함.( ex. com.andsoft.어플이름 )

 

ㆍMinimum Required SDK : 본인이 제작한 어플이 구동되기 위한 최소 버전. 선택한 버전보다 이전 버전의 스마트폰에서는 실행안됨

ㆍTarget SDK : API 14 : 본인 어플을 구동할 실질적인 타겟 버전. 선택한 버전을 우선으로 애뮬레이터가 실행됨.

ㆍCompile With : 프로그램을 만드는데 사용한 API에 대한 컴파일을 어느 버전으로 할 것인가를 선택. 가급적 최신버전 선택

        ( 본 강좌에서는 최신버전인 kitket 대신 API-14버전으로 선택. 'deprecated'되었다는 표시가 보기 싫어서-나중에 추가 설명) 

ㆍTheme : 테마설정. 어플에 적용되는 모양의 기본 틀 테마를 선택하는 항목으로 강좌를 진행하면서 차차 설명하고자 합니다.

 

※ 각 항목에 대해 좀 더 자세히 알고 싶다면 안드로이드 디벨로퍼 사이트를 좀더 참고해 보시기 바랍니다.

 

 

 

일단 아래와 같이 입력해 보겠습니다.

ㆍApplication Name : Hello (직접기입) 

ㆍProject Name : Hello (Application Name 기입하면 자동 완성)

ㆍPackage Name : com.andsoft.hello ( 자동으로 com.example.hello 로 완성되므로 example을 andsoft로 변경해줄것)

     ※ com.example 을 사용하셔도 되지만 그 안에 이미 다른 예제들이 있어서 자칫 에러가 날 수도 있으니 반드시 바꿔주시기 바랍니다.

 

 ※ 각 입력항목의 끝에 있는 콤보버튼으로 선택

  ( 만약 아래 항목들이 보이지 않으면 해당 버전의 SDK가 없는 것이니 상단 툴바에 있는 sdk manager를 통해 다운받으세요) 

ㆍMinimum Required SDK : API 8

ㆍTarget SDK : API 14 : Android 4.0

ㆍCompile With : Google APIs (Google Inc.) (API 14)

  

아래 그림과 같이 입력하셨다면 Next 버튼을 누르고 다음단계로 넘어갑니다.


 

 

아래와 같은 팝업윈도우가 나올겁니다. 참고로 지금 여러분들이 선택하신 내용들은  프로젝트가 생성된 후에 언제라도 변경이 가능합니다.


이 창은 프로젝트의 속성을 지정하는 창입니다.

 

ㆍCreate custom launcher icon 

    - 어플을 설치하면 보여지는 아이콘의 모양을 사용자가 변경하고자 한다면 체크를 합니다.

    - Default로 check 되어 있습니다. 

    - check된 상태에서 Next를 누르면 좀 있다 보게될 icon 설정 단계창이 나오고 해제하시면 icon 설정 단계를 건너뜁니다.

 

ㆍCreate activity 

    - 화면에 보여지기 위해서는 activity라는 class를 만들어야 하는데 만들것인가를 선택합니다. ( activity 설명은 다음 포스트에서)

    - 기본 check 되어 있습니다.

 

ㆍCreate Project in Workspace

    - 생성할 프로젝트 폴더를 저장할 위치를 설정합니다.

    - 기본적으로 처음 여러분이 eclipse에 연결한 workspace폴더 안에 자동으로 앞 단계에서 설정한 Project Name의 폴더를 만듭니다.

 

※ 각 항목에 대해 좀 더 자세히 알고 싶다면 안드로이드 디벨로퍼 사이트를 좀더 참고해 보시기 바랍니다.

 

기본 check상태에서 건드릴 내용이 없으므로 변경 없이 그냥 Next를 누릅니다.

 

위에서 설명한 데로 Icon의 모양을 결정하는 팝업창이 나옵니다.


 

 이 창에서 아이콘의 모양을 바꿀수 있습니다. 이 창은 여러분들이 이것 저것 눌러보시는 것도 좋을 듯 합니다. 오른쪽에 보이는 드로이드 인형 모양의 이미지가 기본적으로 여러분이 만들 어플의 Icon입니다. 해상도별로 여러 사이즈의 이미지가 마련되어 있고 버전에 따라 저 모양도 바뀌고 있습니다.

 

 아이콘 변경은 나중에 언제라도 변경 가능하니 지금은 그냥 Next를 누루고 넘어가겠습니다.

 

화면 출력을 담당하는 Activity Class(추후 설명)를 만드는 단계의 팝업창이 보여집니다.

   

 

현재는 3가지 종류의 액티비티가 선택 가능합니다. 버전에 따라 추가되겠죠. 그냥 여러분이 만드는 액티비티의 기본적이 모양을 결정하는 것이라고 생각하시면 됩니다. 지금 여기서 3가지를 설명하긴 좀 이르니 지금은 기본적으로 선택되어 있는 Black Activity를 선택하고 Next를 누르겠습니다. 각 항목에 마우스를 클릭하면 파란색 음영처리로 선택된 것을 보여줍니다.

 

지금 선택한 Blank Activity는 이름 그대로 비어있는 액티비티를 선택한 것으로 오른쪽 옆에 preview로 보여지는 것처럼 액션바와 제목영역만 포함된 빈 화면을 만들어 내는 Activity 입니다.(강좌를 진행하면서 설명할 내용입니다.)

 

Next를 누르시면 선택한 Blank Activity를 만들기 위해 필요한 파일들을 생성하는 팝업창이 보여집니다.


 

앞에서도 설명한 데로 안드로이드는 C나 Java처럼 콘솔창에 출력하는 것이 아니라서 화면에 'Hello' 라는 글씨 하나를 출력하는데도 상당히 많은양의 프로그래밍이 필요합니다. Activity Class도 이를 위해 미리 만들어 놓은 Class 입니다. 여러분은 이렇게 만들어 져 있는 많은 Class들을 언제 어디에 사용할지를 익히시면 기본적인 어플제작이 가능해 집니다. 또한 이런 일련의 작업들을 하나의 파일안에 다 담아두면 프로그래밍을 하는 것도 어렵고 나중에 디버깅을 하는것도 상당히 어려울 수 밖에 없습니다. 그래서 안드로이드도 기본적으로 프로그래밍과 디버깅이 용이하도록 MVC(Model View Control)패턴으로 구조화하여 프로젝트를 관리합니다. 강좌를 진행하면서 설명드릴 예정입니다. 다음 강좌에서 좀더 자세히 설명하기로 하고 지금은 단순하게 의미만 소개하고 넘어가겠습니다.

 

ㆍActivity Name 

    - 안드로이드는 Java로 개발합니다. 당연히 java원시 파일을 만들어야 겠죠. 그 만들어질 java원시파일의 이름입니다.  

    - 여기서는 특히 화면에 보여지는 역할을 담당하고 있는 Activity Class를 상속한 java파일입니다.

    - Default로 'MainActivity'로 되어있으며 변경가능합니다. java에서 클래스 이름이라고 생각하시면 됩니다.

    - 주의할 점은 'MainActivity'라는 이름이 c나 java의 프로그램 시작점인 main() 함수를 의미하는 것은 아닙니다. *중요*

    - 'MainActivity.java' 라는 이름의 소스파일을 만들어 냅니다.

 

ㆍLayout Name 

    - 안드로이드에서는 화면에 보여질 내용물을 만들때 java언어로 하지 않고 xml 언어로 하기를 권장합니다.

    - xml언어로 하면 디버깅이 용이하고 내용물의 크기나 위치 같은 설정 변경이 용이 합니다. 다음 강좌에서 설명할 예정입니다.

    - 위에서 설정한 'MainActivity.java'와 연결(정확한  의미는 차후에)되어 있는 xml파일의 이름입니다.

    - 이름 변경은 가능하지만 관리가 용이하도록 Activity Name을 참고하여 이름을 선정하는 것이 좋습니다.

    - 기본적으로는 'activity_'로 시작하여 java file의 이름의 대문자를 기준으로 '_'구분자를 사용합니다.

    - 'activity_main.xml' 라는 이름의 리소스파일을 만들어 냅니다.

 

ㆍNavigation Type  

    - 버전 업에 따라 등장한 것으로 지금 설명은 의미가 없으므로 강좌를 진행하면서 설명하기로 하고 지금은 None상태로 두겠습니다.

 

 Default상태에서 변경할 내용이 없으므로 Finish 버튼을 눌러 프로젝트를 생성과정을 마치겠습니다.

 

Finish버튼을 누르고 잠시 기다리면 아래와 같이 프로젝트가 하나가 만들어 집니다. 

 

 

 

 일단 보시는 바와 같이 프로젝트 안에 너무 많은 폴더와 파일들이 보여서 답답해 집니다.

미리 겁먹지 마시기 바랍니다. 강좌를 잘 따라오고 나면 위 파일 구조가 매우 훌륭하게 구조화 되어 있다는 것을 알게 되면서 편하게 프로그래밍 하시게 될 겁니다. 

 

 자. 여기까지 따라 오셨다면 일단 시작은 한 겁니다. 이제 천천히 한걸음씩 어플 개발자가 되어 보겠습니다.

 

프로젝트 생성은 완료하였으니 이제 하나씩 그 구조를 파악해 보겠습니다. 다음 강좌에 뵙겠습니다.

반응형
반응형

 프로그램을 제작한다는 것은 결과적으로 영어로 된 글씨를 작성하는 것이지요. 사실 영어라고 해봤자 회화에서 쓰는 영어가 아니라 명령어 위주의 단어형태이기 때문에 영어를 잘해야 한다는 부담감은 갖지 마시기 바랍니다. 아무튼 영어로 정해진 문법에 맞추어서 만들면 되는데 컴퓨터 한테 말로 말해봐야 알아들을리 없겠죠. ( 음성인식도 아니고..) 그러니 글로 적어서 만들어야 합니다. 허공에다가 글씨를 쓸 수는 없겠죠. 글씨를 쓰려면 책상과 노트, 펜이 필요합니다. 다만 컴퓨터에게 종이로 써서 줄 수 없으니 컴퓨터 상의 종이에 글씨를 써야 되겠죠. 펜 대신에 키보드를 이용하고 종이 대신에 컴퓨터 상의 글 작성 프로그램을 사용하는 것이지요. 이렇게 프로그램 상에 정해진 문법으로 키보드를 이용해서 작성하는 것을 코딩(coding)이라 하는 것이죠. 이렇게 코딩을 하기 위해 사용하는 컴퓨터상의 종이는 메모장으로도 가능한데요. 가만히 생각해 보면 컴퓨터가 기계인데 여러분들이 코딩한 영어를 읽을 수 있을 리가 없겠죠. 컴퓨터는 전기적 신호가 있다/없다.를 나타내는 신호인 1,0 으로만 인식할 수 있는데요. 이를 2진코드 즉 기계어라고 합니다. 우리가 외국서적을 읽기 위해 번역을 하듯이 컴퓨터도 우리의 언어로 작성된 글을 기계어로 번역을 해서 인식합니다. 컴퓨터는 이 번역된 글씨를 읽어가면서 프로그램을 실행시키는 것이지요.

 

 사실 이 강좌를 읽고 있는 분은 이정도는 알고 있으실텐데 제가 개발 도구 준비를 하는 과정의 서두에 이 말을 하는 이유는 가끔 초심자들 중에서 본인이 프로그램을 만들기 위해 이클립스, 비주얼 스튜디오 등 각종 프로그래밍 도구를 사용하면서 정작 왜 쓰고 있는지 모르고 있는 사람들을 보기 때문입니다. 또 각각의 도구가 무엇을 해주는 것인지 모르고 사용하는 경우가 있어서 입니다. 

 지금 여기서 이에 대한 자세한 설명은 하지 않을 겁니다. 이는 이 강좌의 취지보다 좀더 기본적인 프로그램 강좌이니까요. 혹시 위 내용을 잘 모르시는 분이 있다면 별도의 학습을 통해 개념을 익히시기 바랍니다. 다만 안드로이드 어플 개발에 필요한 도구를 설치하면서 이게 왜 설치해야 하는지 간단히 코멘트하는 정도만 하겠습니다. 여러분들은 이 간단한 코멘트를 통해 코딩부터 프로그램 실행까지의 단계를 머리속에 그릴 수 있어야 합니다.

 

 자. 이제부터 어플 개발에 필요한 도구(프로그램)를 마련해 보도록 하겠습니다. 우리가 일반적인 문서작성을 하기위해 아래한글이나 MS워드가 필요하고 동영상을 보기위해 곰플레이어를 다운받아 설치하듯이 어플 개발을 할 수 있도록 몇가지 프로그램을 설치해야 합니다. 다행이 이때 사용하는 프로그램들은 모두 무료이기 때문에 처음 시작하는 입장에서 부담이 없죠. 모두 인터넷에서 다운받아 설치하면 됩니다.

 

 결론부터 말씀드리면 여러분이 설치하셔야 하는 프로그램은 아래의 4가지 입니다.

 

 1. JDK(Java Development Kit) : 자바 개발 도구  // www.oracle.com

 2. Eclipse : 자바 개발 오픈소스 프로그램 // www.eclipse.org

 3. Android SDK(Android Software Development Kit) : 안드로이드 소프트웨어 개발 도구 // http://developer.android.com 

 4. ADT(Android Development Tool) plug-in  : 이클립스에서 안드로이드를 개발 할 수 있도록 하는 추가 소프트웨어 // 이클립스에서 추가

 

 많은 강좌에서 위 프로그램들을 다운받아 설치하라고만 설명하는데 이렇다 보니 각각의 역할이 뭔지도 모르고 그냥 저렇게 있어야 하는구나 하고 넘어가는 사람들이 있습니다. 물론 별도의 설명을 통해 프로그램이 실행되는 과정을 설명하고 있지만 각각의 도구와 연결하여 설명을 하지 않다보니 구분을 못하는 사람들이 있는 모습을 종종 봅니다. 이 강좌에서 이를 자세히는 설명하지 않지만 그래도 각 장치가 무슨 역할 때문에 설치를 하는 구나하는 코멘트는 하면서 설명드리려고 합니다.

 

 1. JDK 설치 : 여러분이 영어로 작성한 글을 컴퓨터가 읽을 수 있도록 기계어로 변환하는 도구/ (자바실행환경 : JRE도 설치)

 2. Eclipse : 코딩을 할 수 있게 하는 도구(글씨를 쓰기위한 종이) / 프로그램 문법에 맞는지 검사하는 역활과 실행버튼도 포함

 3. Android SDK : 위 JDK가 자바 언어를 컴퓨터가 읽을 수 있게 했듯이 Android 언어를 컴퓨터가 읽게 해주는 도구

   - 사실 위 설명은 간단한 이해를 위한 설명인데 정석으로 설명하면 너무 오래 걸릴 것 같아서 줄여서 설명했습니다. 시작할 때는 이정도만 알아도 되지만 좀더 정확한 쓰임새를 이해하려면 다른 자료를 참고하시기 바랍니다.

 4. ADT : 기본적으로 Ecilpse는 자바 프로그램을 만들어주는 도구이기 때문에 좀더 확장된(?) 안드로이드 프로그래밍을 하려면 추가적인 도구들이 필요한데 ADT가 이 역할을 하는 겁니다.

 

- 간략히 설명은 드렸는데 지금은 단지 이런것을 하는 구나 정도만 알아두셔도 프로그램을 만드시는데 무리는 없을 겁니다. 자세한 내용이 알고싶으신 분들은 다른 강좌나 자료를 참고하시기바랍니다.

 

- 참고로 2012년 11월 부터인가 안드로이드 개발자 사이트( http://developer.android.com )안드로이드 개발 도구를 Bundle로 한번에 제공해 주기 때문에 1. JDK 설치후 2,3,4를 한번에 설치할 수 있도록 되었습니다. 참고하시기 바랍니다.

반응형
반응형

 여러분들이 컴퓨터라는 하드웨어를 쓰기 위해서 Windows라는 운영체제를 사용하듯이 스마트 폰이라는 하드웨어를 사용하기 위해서 운영체제가 필요합니다. "안드로이드"라는 것은 바로 이 스마트폰 용 운영체제를 말합니다. 여러분들이 안드로이드 어플을 개발한다는 것은 안드로이드 운영체제 상에서 구동되는 응용프로그램을 만든다는 것이지요.

 

 이 응용프로그램을 개발 할 때 사용하는 프로그램 언어가 java라는 것이지요. 이를 사용하지 않으면 안드로이드가 못 알아듣는 겁니다.

 쉽게말해 미국에서는 영어를 사용하고 한국에서는 한국어를 써야 한다는 것이지요. 안드로이드 운영체제는 자바 언어로 만들어진 코드를 이해한다 정도로 보시면 됩니다. 사실 미국에서도 한국어 통역사를 대동한다면 한국어로 말해도 알아듣게 할 수 있게죠. 그래서 요즘은 안드로이드 어플을 개발할 때 C계열 언어를 사용할 수도 있습니다. 물론 그에 따른 개발 환경(일종의 통역사)이 구축되어야 합니다.  뭐..이런저런 방법을 통해 어플을 개발 할 수도 있겠지만 일단 기본적인 방법을 사용할 수 있게 된 다음에 하는 것이 사상누각이 되지 않는다고 생각합니다. 고로 우선 Java로 개발하는 것을 먼저 하는게 좋다고 생각합니다.

 

 국가  :  언어          운영체제              :     프로그래밍 언어

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

 미국  :  영어         애플  ios                       Object-C 

 한국  :  한글         구글 안드로이드               Java

 중국  :  한자         MS 윈도우                      C#  

 

 안드로이드는 거의 매년 업그레이드를 하고 있어서 어플 개발 공부를 시작할 때의 버전이 끝마칠 때 쯤 바뀌는 경우가 있습니다. 뭐. 약간의 추가사항만 바뀌면 상관없는데 초기 프로젝트 생성과정의 모습이 달라져서 학습자로 하여금 당황스러운 상황을 만나게 합니다. 그렇다고 프로그램을 작성하는 코드의 내용이 바뀌는 것은 거의 없으니 버전에 대한 염려는 크게 하지 않으셔도 됩니다. 제가 이 이야기를 하는 이유는 본 강좌의 안드로이드 버전을 현재 가장 최신인 4.1 젤리빈을 사용하겠다고 말씀드릴려는 것인데 사실 처음 강좌를 시작하려고 마음 먹을 당시만 해도 4.0 아이스크림 버전을 사용하려 했었거든요. 그 짧은 사이 새로운 버전이 나와서 이런 식이라면 강좌를 진행하다가 새로운 버전이 또다시 나오는 상황이 발생할 것 같아서 인데요. 만약 새로운 버전이 나오더라도 가급적 현재 젤리빈을 그대로 사용하려 합니다. 원래 저는 아이스크림 버전이 더 익숙한 사람입니다. 저도 젤리빈은 요사이 조금 만져보는 정도라 다소 신경 쓰이지만 뭐.. 코드설명 위주의 강좌를 진행 할 예정이니 크게 문제될 것 같지는 않습니다. 여러분들도 새로운 버전이 나오네 마네.. 그에 따라 지금 배우는게 영향을 받지 않나 하는 걱정을 하지 말라는 취지에서 말씀드립니다.

 

 참고로 안드로이드 버전은 아래와 같이 발전하였습니다. 누구의 아이디어 인지는 모르겠지만 버전 이름은 디저트 이름에서 따왔습니다. -_-

 

Apple pie..1.0 ver.(2008.09.23) 애플파이
Bananabread..1.1 ver.(2008.09.23) 바나나브레드


Cupcake..1.5 ver.(2009.04.30) 컵케이크 / 안드로이드 최초정식 버전 / 한글지원


Donut..1.6ver.(2009.09.15) 도넛 / 카메라 및 캠코더 등의 인터페이스탑재.



Eclair..2.0ver./2.1ver.(2009.10.26/2010.01.12) 이클레어 / 멀티터치, 블루투스2.1지원 /


Froyo..2.2ver.(2010.05.20) 프로요 / 최적화와 배터리타임등 대부분의 성능개선


Gingerbread..2.3ver.(2010.12.06)진저브레드 / 인터넷 접속을 통한 os업데이트


Honeycomb..3.0ver./ 3.1ver.(11.02.03/2011.05.10) 허니콤 / 홀로그래픽UI / usb기기지원


Icecream sandwitch..4.0ver.(2011.05.10) 아이스크림샌드위치 / 태블릿pc와 스마트폰 공용os


Jellybean..4.1ver.(2012.06.28)
Key lime pie OS 코드명은 K로 시작되는 키 라임 파이(Key lime pie)

2012년 06월 28일, 구글은 미국 샌프란시스코에서 열리는 개발자 회의 '2012 구글(Google) IO'를 통해 안드로이드 4.1 젤리빈과 그 레퍼런스, 넥서스7을 공식 발표했다.

[출처] 궁금한 안드로이드 버전 이름들|작성자 엔돌핀 

 

  안드로이드 버전에 대한 정보는 워낙 인터넷이 많이 있으니 검색해 보시기 바랍니다.

안드로이드 어플 개발자는 본인의 어플을 만들 때 버전에 대한 생각을 분명히 하셔야 합니다. 아직 설명을 드리지 않았지만 여러분들이 어플을 만들 때 어떤 버전으로 만들지를 결정하도록 되어 있습니다. 추가로 최소 어떤 버전 이상부터 본인의 어플이 실행될 수 있다는 것도 명시하도록 되어 있습니다. 여러분들이 아무리 멋진 어플을 개발하였다 하더라도 그 걸 다운받아 실행하는 스마트폰의 버전이 맞지 않으면 그 어플은 성공할 수 없겠죠. 현재 국내 스마트폰의 버전별 분포도는 안드로이드 디벨로퍼 사이트 에서 확인할 수 있습니다. 가급적 많은 유저가 사용할 수 있도록 최소 버전을 잘 선택하셔야 합니다.

 

 

 

2012.09.27 현재 아직도 진저브레드가 가장 많네요.

안드로이드 개발자 사이트 : http://developer.android.com

위사이트에서 About Android -> DashBoards 메뉴에서 확인할 수 있습니다.

사이트의 메뉴가 바뀌더라도 위 메뉴를 찾아보시면 확인할 수 있습니다.

 

 

 

 안드로이드의 프로그래밍 개발 영역은 크게 3가지로 구분할 수 있는데요.

 

1. 안드로이드 앱 개발 (Android App)

 - 앱(App)는 어플리케이션의 줄임말로서 특정한 목적을 수행하기 위해 개발된 소프트웨어라고 보시면 됩니다. 즉, 안드로이드라는 운영체제상에서 실행되는 각종 편의/ 생산 프로그램들을 말하는 것이지요. 여러분들이 흔히 프로그램을 깐다/ 설치한다. 라는 표현을 하는 프로그램들을 모두 어플리케이션이라고 합니다.  앱이나 어플이나 같은 말이지요.

   ex) 지하철 노선도 보기, 가계부 어플, 일정관리 어플 등등..

 

2. 안드로이드 웹 개발(Web)

 - 웹(Web)은 모두 아시다 시피 인터넷과 연관된 프로그램 이라고 생각하시면 됩니다. 무슨 말이냐면, 여러분들이 지금 사용하시는 컴퓨터에서 네이버 홈페이지를 열어보시면 보이는 구조가 있을 겁니다. 뭐. 검색창보이고 메인광고 보이고 기사들 보이고 그 밑으로 쭉~ 이런저런 내용들.. 그런데 이 화면을 여러분의 조그만 스마트 폰 화면으로 본다고 생각해 보세요. 우리가 쓰는 모니터는 대부분 17인치 이상이실텐테 이 화면을 4인치짜리로 본다면.. 눈이 아플정도로 작은 글씨와 이미지로 보이겠죠. 이러면 누가 스마트폰으로 인터넷을 하겠습니까. 그래서 이렇게 작은 스마트폰의 환경에 적합한 구성으로 화면을 구성(UI/UX라고 합니다.)시켜서 웹 사이트를 만드는 것을 안드로이드 웹 개발이라고 합니다. 다들 아시겠지만 스마트 폰에서 네이버 접속하면 화면구성이 다르죠? 그렇게 만드는 것을 말합니다.

  ex) PC환경의 네이버 : www.naver.com         Mobile환경에서의 네이버 : m.naver.com 

 

3. 안드로이드 게임 개발( 사실 앱 개발의 범주에 들어갑니다.^ ^;)

 - 이건 제가 임의로 구분한건데요. 사실 게임 개발은 어차피 앱 개발에 포함되는 용어입니다. 단지 제가 강좌로 소개하려는 내용이 일반 어플은 제외하고 게임 개발만을 목적으로 할 것이기 때문에 억지로 나눈겁니다.(-_-). 일반 어플 개발과 다소 차이가 있다면 일반적으로 간단한 앱 개발은 안드로이드에서 기본적으로 제공하고 있는 위젯(Widget 강좌에서 설명)을 많이 사용하지만 게임 개발은 위젯을 잘 사용하지 않는 다는 겁니다. 프로그램 코드상으로 거의 대부분의 작업을 한다는 것이 일반 앱 개발과 차이가 있는 부분이지요. 그래서 제 강좌는 다른 안드로이드 강좌와 다르게 위젯은 별로 설명하지 않고 코드의 설명을 위주로 이어나갈 예정입니다. 위젯에 대한 학습은 다른 강좌를 참고하시기 바랍니다.

   ex) 앵그리 버드, 룰더 스카이 등등....

 

위 게임정도는 아니지만 그래도 열심히 만들어서 마켓에 괜찮은 게임 하나 올려보자는 목표를 가지고 열심히 합시다.

혹시 아나요. 앵그리 버드 처럼 대박 게임 하나 만들 수 있을지....^ ^

 게임은 화려한 프로그래밍 기법으로 성공하는 것이 아니라고 봅니다. 아주 단순한 게임이라도 중독성 강한 게임은 얼마든지 성공할 수 있다고 봅니다. 웬만한 캐주얼 게임은 그렇게 화려한 기법을 사용하지 않으니 여러분도 미리 할 수 있다 없다 고민하지 말고 도전하시기 바랍니다.



반응형
반응형

- 이 포스트는 제 네이버블로그에 있던 내용을 재 포스트한 것입니다.

- 추후 여유가 있을 때 수정할 부분들은 수정할 예정입니다.


 본 강좌는 간단한 게임 어플 예제를 학습하여 안드로이드 어플을 제작할 수 있도록 도움이 되고자 시작하게 되었습니다. 

좀 거창하게 "안드로이드 게임 어플 제작" 이라고 했지만 전문게임제작회사에서 개발하고 있는 화려한 그래픽의 게임은 아니고 단순하고 아기자기한 캐릭터를 이용한 캐주얼 게임을 제작하고자 합니다.

 

 스마트폰의 성공적인 보급으로 인해 모바일 어플개발의 전망은 상당히 좋아졌죠. 물론 상당한 인력들이 양성되면서 현재 어플 개발 회사에 취업할 수 있는 경쟁력은 초기보다 약해졌지만 여전히 상당 수의 업체에서 모바일 어플 시장으로 영역을 확대하고 있고 결정적으로 1인 창조기업이 가능해 졌다는 것이 가장 큰 매력이라고 생각합니다. 분명 프로그래밍 분야에서 가장 효용성이 좋은 skill은 어플 개발 능력이라고 보여집니다.

 

 현재 국내에 보급된 스마트 폰의 운용체제는 크게 3가지로 구분되어 있습니다. 국내에서 삼성, LG등 가장 많은 기종이 선택한 구글의 안드로이드, 세계적으로 선풍적인 인기를 달리고 있는 애플 아이폰의 ios,  MS사의 자존심 회복을 노리는 윈도우7, 그 밖에 여러종류의 운영체제가 있지만 국내에서는 별다른 재미를 보지 못하고 있죠.

 

1. 구글 안드로이드 운영체제


 

 

운영체제 개발사 : 구글
스마트폰 제조사 : 삼성전자, LG전자, 모토롤라, 구글, HTC 등

적용 사례 :  갤럭시(삼성), 옵티머스(LG), 모토로이(모토롤라), 디자이어(HTC) 등

 

2. 애플 iOS 운영체제 


 

 

운영체제 개발사 : 애플
스마트폰 제조사 : 애플

적용 사례 : 애플 아이팟, 아이폰3Gs, 아이폰4

3. 윈도우폰 운영체제

 


 

 

운영체제 개발사 : 마이크로소프트

스마트폰 제조사 : 삼성전자, LG전자, HTC 등 
적용사례 : 옴니아7 시리즈(삼성), 옵티머스7(LG), HD7(HTC) 등

[네이버 캐스트 인용]

 

 각각의 운영체제마다 개발 언어를 달리 두고 있습니다. 안드로이드는 자바, 아이폰은 Object-C, 윈도우폰은 C#.

개발자로서는 참 짜증나는 일이 아닐 수 없죠. 그 중 아이폰 개발을 위해서는 맥킨토시 PC가 필요하죠. -_-;

아마 이 글을 읽고 있는 대부분의 여러분들도 저처럼 윈도우 PC를 쓰고 계시겠죠. 그렇다고 비싼돈을 들여 맥 PC를 살수도 없고요...

 

뭐. 이런저런 핑계에서 비롯되었지만 현 상황에서 우리가 접급할 수 있는 가장 손쉬운 운영체제는 안드로이드 겠죠. 다행이 안드로이드 쪽의 어플 개발이 국내에서 가장 많은 비중을 차지하고 나중에 개발한 어플을 마켓에 등록할 때도 아이폰보다 저렴한 돈으로 할 수 있으니 어쩔 수 없는 다소 "강요에 의한 최선의 선택(?)"으로 안드로이드 어플 개발자가 되어 보겠습니다.

 

 본 강좌는 안드로이드 어플개발업체로 취업하고자 하는 목표를 가진 분에게도 도움이 되고 개인이 1인 또는 소규모의 개발 회사를 창업해서 어플 개발자가 되기위한 분에게도 도움이 되고자 합니다. 물론 거창하게 개발회사 창업이라고 했지만 안정적으로 다니는 회사를 박차고 나와서 사업을 하거나 취업도 하지않고 방구석에서 컴퓨터만 붙잡고 있을 수 있는 분이 얼마나 있겠습니다. 본 강좌를 쓰고있는 본인 또한 현재 프로그래밍 교육기관에서 강의를 하는 한 사람의 직장인입니다. 다행히 프로그램 개발이라는 것이 단순히 PC하나만 있으면 별도의 공간없이도 충분히 가능하기 때문에 직장생활을 하면서도 도전할 수 있다는 것이죠.

 

 본 강좌는 프로그램을 처음 다루어 보시는 분에 맞추어져 있지는 않습니다. 자바를 잘은 못하더라도 한번 학습한 적인 있거나 자바가 아니더라도 C계열의 언어를 한번이라도 학습한 적인 있으신 분에 맞추어져 있습니다. 즉, 자바의 기본 문법에 대해 세세하게 설명하면서 강좌를 진행하지는 못할 것 같다는 것입니다. 안드로이드 어플 개발을 위해서 자바 능력은 어쩔 수 없는 필수 조건입니다. 그렇다고 완전히 자바의 모든 문법을 사용할 수 있어야 한다는 것이 아닙니다. 제가 학생들을 가르치면서 다소 안타까운 것이 프로그램 언어를 열심히 배우고 나서 본인이 실력이 매우 형편없다고 느끼는 학생을 보는 겁니다. 물론 몇개월 배웠다고 자바를 실무경력자들 만큼 잘하기는 어렵죠. 하지만 그들도 처음부터 잘하지는 못했고 회사에 입사할 때 화려한 기술을 가지고 입사하지 않았다는 겁니다. 자바의 문법을 열심히 배웠다고 실무 바로 적용할수 있는 센스를 가진 사람은 거의 없다고 보여집니다. 

 

 쉽게 말해 덧셈을 열심히 배워서 더하기를 할 수 있게 되었고, 구구단을 열심히 배워서 구구단을 익힌 사람에게 갑자기 100자리의 곱셈을 하라고 하면 덧셈도 알고 구구단도 알고있지만 정작 둘을 이용해서 곱셈을 하지 못하는 원리와 같습니다. 하지만 이런 사람에게 곱셈의 원리를 알려주고 연습하면 수월하게 100자리의 곱셈을 하고 나아가 알려주지 않아도 10000자리의 곱셈도 할 수 있게됩니다. 이 과정에서 구구단이나 덧셈을 완전히 못해도 상관없습니다. 곱셈의 원리를 배우면서 구구단이 잘 기억나지 않으면 그 때 다시 보면 됩니다. 구구단을 완전히 외울때까지  곱셈 공부를 시작하지 않으면 점점 시간은 길어지고 정작 하고자 하는 곱셈은 시작도 하기전에 포기하게 됩니다.

 

 프로그램도 마찬가지 입니다. 처음 문법을 익히고 나면 이 많은( 전 별로 없다고 생각하는?) 문법들을 어떻게 써먹어야 하는지 막막합니다. 사실 내가 얼마나 익히고 있는지도 반신반의죠..

 

 저도 안드로이드를 처음 시작할 때 자바의 모든 문법을 잘 쓰지는 않았던것 같습니다. 그런데 안드로이드 어플 개발을 하다보니 자주 쓰는 자바의 문법이 있고 오히려 자바를 학습할 때 그렇게 이해되지 않던 영역이 번쩍! 하면서 이해됐던 경험도 있습니다.

 

 자!! 좀 장황하게 설명드렸는데 결론은 프로그래밍 언어(가급적 Java)를 학습한 적인 있다면 우선 안드로이드를 시작하면서 필요한 자바 문법이 있다면 그 때 그때 찾아가면서 학습에 도전하시기 바랍니다. 최대한 저는 여러분들이 매우 미약하게 프로그래밍 능력이 있다는 전제 하에서 강좌를 이어 가보도록 하겠습니다. 여기서 미약하게는 적어도 기본 제어문이나 연산자는 별도의 설명없이도 이해 할 수 있어야 한다는 것입니다. 사실 얼마나 잘 할 수 있을지는 자신없네요.(-_-);

 

참고 : 저도 회사원이다 보니 다음 강좌를 언제 쓸 수 있다고 자신할 수 없다는 점 이해 바랍니다.

 

※ 제 강좌의 주요 예제는 "안드로이드 사이드"의 [게임개발]을 참고하였습니다.  http://www.androidside.com

반응형

+ Recent posts