Hello World 분석하기

Posted in 모바일 // Posted at 2010. 7. 13. 10:47
728x90
글 작성일: 2010/02/12 , 옮긴 날: 2010/07/13

Hello World 프로젝트를 통해 안드로이드 기본 구조에 대해 이해해 보기로 했습니다

Hello World 프로젝트는 모든 프로그램 공부를 시작할 때 제일 처음 접하게 되는 데모로써
기본적인 동작 방식 이해, 실행 코드 이해, 프로그래밍 모델 이해를 목적으로 합니다
따라서 우선 이 프로젝트를 분석하여 안드로이드 어플의 기본 구조에 대해 알아 보기로 했습니다

Hello World 프로젝트에 보면 src -> package명 -> MyActivity.java 파일이 있네요
까 보겠습니다

package my.androiddemo;

import android.app.Activity;
import android.os.Bundle;

public class MyActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}


package는 프로젝트 만들 때 제가 지정한 이름이고...

안드로이드 SDK가 제공해 주는 API를 사용하기 위해 두 개 import 하네요
자세한 건 담에 알아보기로 하구....

다음으로 Activity 란게 있네요. 안드로이드는 기본 단위는 Activity 인가 봅니다
(음.. 문득.. UML 의 액티비티가 떠오르네요 ㅋ)

닷넷환경에서 윈도우 응용프로그램은 폼(Form) , 웹은 페이지(Page) 가 기본 실행단위입니다
즉 Form 클래스 , Page 클래스를 상속받아서 구현하도록 되어 있죠

이와 유사한 구조로, 안드로이드에서는 Activity 라는 클래스를 상속받아야 하는군요

그리고 onCreate 를 부모 Activity 로부터 오버라이딩 하는구요
Activity 가 생성될 때 호출되는 이벤트 메서드 인가 봅니다
부모 클래스의 onCreate 호출해 주고, 안드로이드 화면에 Activity의 컨트롤들이 표시되록 해 주는군요

간단하네요
근데 이 파일에는 UI 와 관련된 내용이 없네요
Hello World 라는 문자가 어딘가에 있어야 하는데 말이죠...

역시 생산성과 유지보수설을 좋게 하기 위해 UI 파일과 로직파일을 분리하고 있군요
프로젝트에서 res -> layout -> main.xml 파일이 있네요
이 넘이 UI 구성을 위한 파일이네요
(실버라이트 응용프로그램과 굉장히 유사한 구조이네요. 실버라이트의 경우 UI코드는 xaml 파일에,
 로직은 .xaml.cs 파일에 있죠)

- UI 정의파일    : res->layout->xxx.xml
- 로직 정의파일 :  src -> package명 -> xxx.java


main.xml 파일을 열어 보면, 아래처럼 UI 구성을 할 수 있는 창이 뜹니다
왼쪽에는 각종 컨트롤들이 있고 오른쪽에는 작업하는 화면이군요



그리고 이클립스 오른쪽 Outline에 보니 이 Activity에는 총 두개의 컨트롤이 올라가 있는 것을 보여줍니다
LinearLayout 와 TextView 컨트롤.
즉 화면의 배치를 위한 레이아웃 컨트롤과 Hello World 문자를 위한 TextView 군요


이 main.xml 코드를 보면 아래와 같습니다
LinearLayout 컨트롤이 TextView 컨트롤을 포함하고 있네요.

LinearLayout 의 속성에는 수직분할(vertical)을 하고 크기와 높이가 화면 전체를 꽉 차지하도록(fill_parent)
설정했네요.

그리고 TextView 의 속성에는 넓이는 역시 부모 컨트롤 크기에 차도록(fill_parent) 하고 높이는 이 컨트롤의 내용에 맞도록 구성하고(wrap_content) 있네요

그리고 표시될 텍스트(text)는 Hello World 라는 예약 문자인가 봅니다(@string/hello) .. 친절하군요.
이런문자까지 예약해 두다니...

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/hello"
    />
</LinearLayout>