본문 바로가기

Out-of date

[SDK 1.0] #03. Hello, Android!로 배우는 기초 - (2) 코드 파헤치기

알립니다!!
현재 보시고 계신 강좌/글은 SDK 1.0를 기준으로 작성된 것입니다.
SDK 업데이트에 따라 변동사항이 있을 수 있으므로 새로운 SDK 버전을 기준으로 작성된 다른 글을 참고하시길 권합니다.



이전 글에서 Bundle에 대한 설명까지 알아봤습니다.
일단 예제 코드 전체를 다시 한번 봅시다.
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class HelloAndroid extends Activity{
public static void onCreate(Bundle icicle)
{
super.onCreate(icicle);
TextView HelloText = new TextView(this);
HelloText.setText("Hello, Android!");
setContentView(HelloText);

}
}

그럼, 이제 다음으로 TextView가 기다리고 있군요.
import android.widget.TextView;

TextView는 화면상에 텍스트를 표시해주는 역할을 합니다. 보통, Activity를 작성할 때 Layout을 작성하게 되는데, 각 Layout 을 구성하는 하나의 페인(Pane)의 한 종류라고 볼 수 있겠습니다. TextView를 사용하려면, 일단 다른 것들과 마찬가지로 객체를 생성해 주어야 합니다. TextView의 생성자는 다음과 같이 3가지가 있습니다.

public TextView(Context context)
public TextView(Context context, AttributeSet attrs)
public TextView(Context context, AttributeSet attrs, int defStyle)

지금 예제에서는 첫번째 형태를 사용하고 있습니다.
그런데, 생성자에서 넘겨받는 인자의 형태를 보면 Context형 객체를 넘겨받도록 되어있습니다. 그런데, 위의 코드에서 보면 this, 즉 HelloAndroid 클래스를 넘겨주고 있습니다. HelloAndroid 클래스는 Activity클래스를 확장할 뿐인데, 어떻게 이게 가능할까요? 답은 Activity 클래스 안에 있습니다.

Activity 클래스의 상속도(?) 를 보면 다음과 같습니다.

java.lang.Object
android.content.Context
   └android.content.ContextWrapper
      └android.view.ContextThemeWrapper
         └android.app.Activity

위와 같이, Activity클래스 자체가 Context클래스를 확장한 형태이기에, 예제 코드에서 보는 바와 같이 TextView 생성자의 인자로 넘겨줄 수 있습니다.

이렇게 TextView형 객체를 생성해 준 후, 생성해 준 객체에 원하는 문자열을 넣어주어야 겠지요? 새로 만들어준 객체에 텍스트를 지정해 주는 것은 이미 친숙한 형태인 setText() 메소드를 사용합니다. setText()메소드의 인자로 지정할 텍스트를 넘겨 주면 됩니다. 자, 그럼 다음 코드로 넘어가볼까요?

setContentView(HelloText);

setContentView() 메소드는 레이아웃이나 View를 Activity의 화면으로 표시해주는 역할을 합니다. 나중에 알아보겠지만, main,xml의 레이아웃을 지정해 줄 수도 있고, 특수한 View를 지정해 줄 수도 있습니다. setContentView()메소드 또한 여러 형태가 있습니다.

public void setContentView(int layoutResID) // 레이아웃을 지정해 줄 때 사용합니다.
public void setContentView(View view) // 특정한 View를 Activity 화면에 표시해 줄 때 사용합니다.

지금의 예제에서는 두번째 형태의 setContentView() 메소드를 사용합니다.
위에서의 Acivity 클래스와 같이, TextView클래스도 View 클래스를 확장한 형태이기에, setContentView()메소드의 인자로 넘겨주는 것이 가능합니다. 지금의 예제에서는, "Hello, Android!"가 들어가있는 TextView객체를 화면에 표시해주게 되겠죠?

앗! 이거.. 어쩌다보니 super.onCreate()에 대한 설명을 빼먹었네요....
음, 이것에 대해 설명으로 하려면 기본적으로 Activity 클래스에 대한 설명도 덧붙여야 하기에, 다음 글에서 다뤄보도록 하겠습니다.