<"Hello World !" 를 분석해 보자>

 

  

이전 프로젝트 생성법 을 하면서 에뮬레이터에 처음으로 만든 앱을 만들었다.물론 우리가 한건 에뮬레이터를 실행 하였더니 자동으로 "Hello World!"가 찍혔을 뿐이니 만든거라고 하기도 뭐했었다...

 그래서 이번 시간부터는 "Hello World!" 가 앱에 어떻게 나타나게 되었는지 ,안드로이드 프로그래밍을 어떻게 하는지 가장 기초적인,가장 중요한 부분을 파헤쳐 보자.

 

 

 

 

 

1.프로젝트 생성후 구조.

 

이전 시간에 만든 JooAndroid 프로젝트를 펼쳐보기를 통해 간략설명을 하겠다.

빨간 테두리가 전부 펼쳤을때 목록들이다.그중 노란색 박스는 "Hello World!"를 파헤치기 위해 필요한   소스 파일들이다.

 

 

 

열기:프로젝트 구성 폴더역할

 

 

 

 

2.strings.xml 파일을 먼저 보자.

 

res - values -strings.xml 을 열면 우측 창과 같이 xml 소스가 나온다. (소스창이 알록달록 한것은 따로 설정을 하였을뿐 소스가 틀리거나 하진않습니다.)

 

 여기서 <string name="hello_world">Hello World!</string> 문법을 보는순간 아!! 하는 깨달음이 생기신 분들이 있을것입니다. 직관적이죠? 우리가 처음 자동으로 생성된 앱을 실행하면 Hello World! 가 나왔는데 여기서 출력된 것 입니다.

 

 string 이라는 엘리먼트 에 name 속성에 들어가는 값이 "hello_world" 라 되어있습니다. 속성값이 바로 리소스 ID입니다. ID를 hello_world 라고 부여해준 것이죠.ID로 식별을 하게됩니다.

 

values 폴더가 문자열을 미리 정의 한다고 위에서 말했죠? 말그대로 앱을 실행하면 Hello World! 를 미리 정의해놓고 "hello_world"  라는 ID를, 화면에 보여주는 작업을 하는 레이아웃 activity_main.xml 에서 ID를 사용한 것 입니다.

 

 

 

 

 

 

 

3.activity_main.xml 이라는 레이아웃 정의.

 

res - layout - activity_main.xml 열자. 이곳도 xml 소스들이 사용되며 레이아웃 배치를 할수있다.한마디로 내가 앱을 켰을때 버튼,텍스트 등을 보여줄텐데 어떻게 화면을 보여줄것이냐? 텍스트는 정중앙에 나오게 해라,누르기 버튼은 좌측 하단에 두어라..등등 가구배치하듯이 해줄수 있다.

xml 문법은 규칙이 간단하고 쉬우며 직관적이여서 보기 쉽게 되어있습니다.필요할때 검색을 통해서 확인하세요.

 

 빨간박스안에 android:text="@string/hello_world"  소스 코드를 보면 대부분의 문법이 android: 로 시작을 하게되고 text라는 속성이 있고 ,속성 값으로 "@string/hello_world" 정의되어 있다. @는 리소스에서 ID를 참조하라는 뜻이다.

그러므로 @string 이라는건 string 리소스 에서 hello_world 라는 ID를 찾아서 그것을 가져다 써라 라는 말이다.

 " / "는 구분하기 위해 쓰였다. 그렇다면 단순히 불러온다고 아까 미리 문자열 정의된 "Hello World!"가 출력되는것이 아닌, 소스창에서 보면 텍스트 뷰라는 코드안에 문법이 들어가 있다.

<TextView android:text="@string/hello_world" /> 텍스트 뷰(TextView )는 화면에 텍스트를 출력하는 위젯이다. 단순히 문자열을 화면에 보여주기만 한다.

그리고 TextView 는 RelativeLayout 라는 레이아웃에 포함되어있다.레이아웃은 차츰 알아가보자.

 

이 문법을 해석하면 텍스트 뷰라는 화면에 문자열 출력하는 위젯을 만들었고 출력될 문자는 "@string/hello_world"에서 string 리소스중 hello_world 라는 ID를 찾아라 라고 알려주었고,찾아 보니 strings.xml 파일에  <string name="hello_world">Hello World!</string> 라고 하는 ID가 존재 하였으며 "hello_world" 라는 ID는 Hello World! 라는 문장을 정의 하고 있었던 것이다. 그래서 TextView  에 Hello World! 가 나타난 것이다.

 

 

 

 

 

 

4.R.java 에서 각각의 ID에 대해 리소스 주소를 자동관리.

 

위에서 계속 xml 문법만 보다보니 java 로 하는게 맞는지 의아해 했을 수 있다.그러나 걱정안해도 된다.결국은 java 문법을 통해 호출하여 사용하게 되며 xml 에서 레이아웃 배치들을 했었지만 java 문법을 통해서 xml 문법이 하던일을 대신 할수도 있다. 하지만 이렇게 분리를 하여 xml코드와 java 코드들을 써가며 하는것은 그 나름대로의 장점들이 크기 때문이다.

 

 우선 R.java 는 리소스 ID 라 했던 속성값 들이 자동으로 저장되며 리소스간의 구분을 위해 16진수의 값이 중복되지 않도록 관리 된다.알아야 되는 것은 ID 명칭만 잘 안면 된다.

string 리소스에서 ID 3개 action_settings,app_name,hello_world 가 있다. strings.xml 에 정의되어 있는 ID를 다시 한번 확인해봐라 그곳에 있던 (속성값 또는 ID) 가 R.java 에 상수(static final)로 하여 자동으로 정의되고 있었다.

 

 ID저장되는 것이 궁금하다면 "hello_world"를 "helloJava" 로

strings.xml 의  <string name="helloJava">Hello World</string> 로 변경,

activity_main.xml 의  android:text="@string/helloJava로 고쳐서 해보면 R.java 에 "hello_world" 라는 ID 대신 "helloJava" 라는 ID로 자동변경되어 있을 것이다.

자동으로 관리되기에 직접 소스수정등을 하지말자.

 

 

 

 

 

5.마지막으로 MainActivity.java 에서 java코드들 정의.

 

우리가 흔히 아는 java 코드로서 Activity 를 상속받고 있으며 액티비티는 화면 하나를 표현하므로 액티비티가 하나이기에 화면 하나만 만들어 지는 것이다.

onCreate 메서드에서 setContentView 를 보자.setContentView(R.layout.activity_main); 메서드 안에R.layout.activity_main 라는 레이아웃을 보여주겠다.연결하겠다 라는 말이다.여기서 R.layout.activity_main 이 값은 XML 레이아웃의 리소스 ID 이다.

 무슨말이냐 하면 프로젝트 생성후 기본 생성되었던 activity_main.xml 파일의 레이아웃 리소스 ID가 기본적으로 생성 되었는데, R.java 로 가서 public static final class layout  를 찾으면 리소스 ID 값으로 activity_main 이 기본 생성되어 있다.

 

 호출을 하기위해 R클래스 내부 static 클래스 이기에 문법이 R.layout.activity_main 이렇게 생긴 것 이다.

그러므로 activity_main.xml의 레이아웃(화면) 을 앱에다 보여주어라 명령한 것이고.그외의 다른 액티비티(화면)를 따로 더 호출하거나 만든 것이 없기에 기본 앱 화면에 "Hello World!" 만 나타나게 된 것이다.

 

블로그 이미지

532

처음 프로그래밍을 시작한 개발자들은 Hello World!를 기억 할 것이다. Hello world가 Hell World가 될 줄 몰랐던 한 개발자의 이야기. 게시글의 출처를 표기하며, 출처를 남기지 않고 펌을 하는것에 대해 법적 책임을 묻지 않습니다.

,