태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

외부 리소스 사용하기 (문자열)

2009.03.14 04:22

안드로이드 프로그래밍에서 어찌 보면 가장 중요하게 다뤄야 할 것이 바로 외부 리소스의 이용일 것입니다.
외부 리소스의 이용이라... 써놓고 보니 너무 거창하게(??) 표현되긴 했는데, 사실 별 거 없습니다 -_- 지금까지 무의식중에 외부 리소스를 계속 사용하고 있었죠.

setContentView(R.layout.main);

이거, 뭔가 익숙하지 않나요? 맞습니다. 바로 우리들이 만든 레이아웃을 액티비티에 적용시킬 때 쓰는 코드죠.
setContentView()메소드를 통해 레이아웃을 설정해줍니다. 물론, 그 안에 파라미터로 들어가는 R.layout.main은 우리들이 만든 레이아웃 코드입니다.

입문 강좌(2008/12/28 - [안드로이드/안드로이드 입문] - #03. Hello, Android!로 배우는 기초 - (5) XML Layout 활용하기)를 보시면, 안드로이드에서 외부 리소스(레이아웃)을 참조하는 것과, 그를 위해 사용되는 R.java 파일에 대한 설명이 간단하게 나와있으니, 참고하시면 됩니다 :)

R.java 파일, 즉 R 클래스를 통해서 액티비티에서 외부 리소스를 참조하게 됩니다. 이건 2008/11/23 - [안드로이드/안드로이드 입문] - #02. 안드로이드 SDK 전격해부! 를 보시면 자세하게 아실 수 있으니, 참고하세요.

이렇게, 외부 리소스를 참고하는 이유는 코드와 레이아웃을 분리하는 의미도 있지만, 그것보다 더 중요한 것은 다양한 국가나 지역에 어플리케이션을 출시할 때, 그 수고를 줄일 수 있기 때문입니다.
영어로 된 어플리케이션을 한글판으로 바꾸려 한다고 가정해봅시다. 만약, 문자열들을 외부에서 참조하지 않고 텍스트들이 XML 레이아웃 코드에 그대로 다 들어가있다면, 하나하나 영어를 한글로 바꾸어주어야 할 것입니다. 작은 규모의 프로그램이라면 모르겠지만, 어느 정도 규모가 커지면 작업하기도 힘들어지고, 하다가 코드에 손상이 갈 수 있는 위험성도 있죠. 뿐만 아니라, 다국어 지원이 엄청나게 힘들어지겠죠??

반면, 문자열을 외부에서 참조한다면, 영문판에서 사용하였던 문자열 파일의 내용만 한글로 바꾸어주면 됩니다. 또한, 특정 형식에 맞게 이름을 지정해주면 안드로이드 단말의 Locale 설정에 따라 알맞는 문자열로 출력되게 됩니다.
무튼, 예제를 통해 안드로이드에서 외부 문자열을 참조하는 방법에 대해 알아보도록 하겠습니다.

처음 어플리케이션을 실행했을 때 나오는 화면


프로젝트를 만들고, 바로 실행하게 되면 보통 위와 같은 화면이 뜨게 됩니다. 일반적으로, 이렇게 자동으로 생성된 파일의 내용을 지우고 새로 개발을 시작했는데, 한번 이 안을 자세히 보도록 합시다.

main.xml 파일을 열어서, 다음 코드를을 찾아봅니다.


이제까지는, android:text="테스트"의 형식으로 많이 썼는데, 여기에는 @string/hello 형식으로 되어있습니다. 이게 어떻게 된 걸까요?? 바로, 이게 문자열을 외부에서 참조한 것입니다. hello라는 이름을 가진 문자열 값을 참조한 것이죠. 왼쪽의 파일 탐색기에서 strings.xml 파일을 열어봅시다.




위와 같이, 현재 등록되어 있는 문자열 값들을 볼 수 있습니다. 아까 봤던 hello라는 이름을 가진 문자열의 값은 화면에 표시되는 문자와 동일한 "Hello World, String Example"로 등록되어 있는 것을 알 수 있습니다. 그렇다면, 여기서 문자열을 하나 추가해볼까요?? Add.. 버튼을 눌러봅시다.


위 화면에서, String을 선택하고 OK를 눌러줍니다.


위와 같이 왼쪽에 새로 항목이 추가될 것입니다. 위 화면과 같이 입력하고, 빈 곳 아무 곳이나 클릭하면...


위와 같은 화면이 뜨면서 정상적으로 문자열 값이 추가된 것을 확인할 수 있습니다. 그럼, 이렇게 추가한 문자열 값을 화면에 표시해보도록 하겠습니다. TextView를 이용하여 띄워보도록 하죠.


ADT의 기능들을 활용해보도록 하죠. LinearLayout 안에 TextView를 하나 더 추가해야 하므로, LinearLayout을 누르고 "+" 버튼을 눌러주면, 다음과 같은 화면이 나오게 됩니다.

이 화면에서 OK를 눌러줍니다.




추가를 해주셨다면, Properties 창에서 Text항목을 찾습니다. 일반적으로 콘솔 창 있는 곳에 같이 있습니다.
찾으셨다면, Text가 비어있을 것입니다. 바로, 이 곳에서 바로 텍스트를 입력해 줄 수도 있고, 외부 문자열을 참조하도록 할 수도 있습니다. 빈 곳을 누르면, 오른쪽에 ... 버튼이 보일 것입니다. 클릭합니다.


아까 입력한 텍스트의 이름이 test였으니, 그걸 선택한 후, OK를 누릅니다.


OK를 눌렀다면, Text에 다음과 같이 나오게 됩니다. 이걸 실행하면, 아래와 같은 화면이 뜨겠지요??


이것으로, 간단하게 문자열 외부 참조에 대해 알아보았습니다.
문자열 뿐만 아니라, 안드로이드의 리소스는 대부분 외부 참조를 해 주는 것이 유지,보수에 좋습니다. 개발할 때 더 세세하게 설계해야하므로 복잡해지기는 하지만, 나중에 큰 어플리케이션을 짤 때에는 이게 필수적이므로 몸에 익게 만드시는게 좋을 것입니다.

참고하시라고 소스코드 첨부합니다.
[main.xml]





    




[strings.xml]


    Hello World, StringExample
    StringExample
안드로이드 문자열 참조 테스트입니다.



저작자 표시 비영리 변경 금지
신고

커니 어플리케이션 구성/리소스(Resources) , , , , , , ,

  1. Blog Icon
    소안

    한글이 깨져서 나오는 문제는 이클립스 문제인가요?

    <?xml version="1.0" encoding="utf-8"?> 아니면 아것 때문에?

  2. 한글이 깨질경우 프로젝트 명 우클릭 후 properties>text file encoding을 변경해 보세요

  3. 좋은글 출처를 표시하고 블로그에 담아갑니다. ^^

  4. Blog Icon
    쿠쿠리

    문자열 리소스를 더할 순 없을까요?
    <string name="aa">aa</string>
    <string name="bb">@aa+bb</string>

    bb의 스트링이 aabb로 받고싶습니다

  5. XML 상에서 두 문자열을 연결하는 방법은 없습니다.
    참조 ; http://stackoverflow.com/questions/10411699/concatenate-multiple-strings-in-xml

    String.format 메서드를 사용하시는 것이 가장 적절한 대안일 듯 합니다.

  6. Blog Icon
    쿠쿠리

    감사합니다. 꾸벅