Study Record

앱 리소스와 관리 본문

안드로이드

앱 리소스와 관리

초코초코초코 2023. 6. 9. 23:19
728x90

😎 앱 리소스

앱을 만들 때 이미지나 아이콘, 파일 등 여러 가지 정적 콘텐츠를 리소스라고 부른다. ex) 비트맵, 레이아웃 정의, 문자열 

 

리소스(문자열, 이미지 등)는 직접 코드에 정의하기 보다 유지 관리하기 쉬운 리소스 디렉터리를 사용할 수 있다. 이렇게 외부화한 리소스는 R 클래스에서 생성되는 리소스 ID 로 액세스 할 수 있다.

 

 

예를 들어, xml 파일에 리소스(문자열)를 외부화하지 않고 사용하는 예시이다.

<Button
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="사랑해" />

 

"사랑해" 문자열을 외부화하여 xml 파일에 사용하면 @string/[정의한 리소스 ID] 로 외부에서 정의한 문자열을 가져올 수 있다.

<Button
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/submit" />

 

앱에서 사용하는 문자열을 파일로 관리하는 디렉토리 하나를 신경 쓰는 것과 변경된 사항이 있을 때마다 xml 파일을 뒤져가며 수정하는 것을 생각하면 외부화하여 관리하는 것이 더 쉽다.

 

 

😎 리소스 종류

리소스에는 여러가지 종류가 있고 그 종류에 따라 지원되는 리소스 디렉터리가 있다.

 

디렉터리 리소스 유형
animator 속성 애니메이션을 정의하는 xml 파일
anim 트윈 애니메이션을 정의하는 xml 파일
color 색상 상태 목록을 정의하는 xml 파일
drawable 드로어블 리소스 하위 유형으로 컴파일되는 비트맵 파일 또는 xml 파일
ex) 비트맵(png, JPG, GIF), 도형, 나인-패치 등
mipmap 런처 아이콘 밀도에 관란 드로어블 파일
layout 사용자 인터페이스 레이아웃을 정의하는 xml 파일
menu 메뉴를 정의하는 xml 파일
raw 원시 형태로 저장되는 임의의 파일
values 문자열, 정수, 색상 등 간단한 값을 포함하는 xml 파일

리소스 배열(arrays.xml)
색상 값(colors.xml)
크기 값(dimens.xml)
문자열 값(strings.xml)
스타일 값(styles.xml)
xml Resources.getXML() 을 호출하여 런타임에 읽을 수 있는 임의의 XML 파일
font 글꼴 파일(OTF, XML)

 

 

프로젝트에 직접 표시되는 파일 계층구조의 예시는 다음과 같다.

MyProject/
    src/
        MyActivity.java
    res/
        drawable/
            graphic.png
        layout/
            main.xml
            info.xml
        values/
            strings.xml
            colors.xml

 

 

😎 리소스 ID

리소스 정보를 저장하는 xml 파일에 ID 를 부여해야 하는 값들이 있다.

 

ex) 문자열 값( res/values/strings.xml )

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello</string>
    <string name="hi">@string/hello</string>
</resources>

name 값이 리소스 ID 값으로 사용된다. (hello, hi)

 

 

😎 리소스 엑세스

애플리케이션이 컴파일되면 aapt 가 R 클래스와 리소스 ID 를 자동으로 생성한다. aapt 가 생성한 R 클래스로 모든 리소스들을 액세스 할 수 있는데 R.[리소스 유형].[리소스 이름] 으로 접근할 수 있다.

 

- 리소스 유형 : 리소스는 drawable, string, color 등 리소스 유형으로 그룹화된다.  

- 리소스 이름 : 확장자를 제외한 파일 이름이나 xml 파일의 android:name 값으로 정의된다.

 

 

따라서, res/drawable/my_icon.png 이라는 이미지 리소스가 있다면 R.drawable.my_icon 으로 접근할 수 있다.

R.drawable.my_icon

 

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello</string>
    <string name="hi">@string/hello</string>
</resources>

res/values/strings.xml 파일에 정의된 리소스의 경우에는 다음과 같이 접근할 수 있다.

R.string.hello
R.string.hi

 

 

코틀린/자바로 작성된 코드에서는 위의 예시(R 클래스)로 접근할 수 있고 XML 파일에서는 @[리소스 유형]/[리소스 이름] 으로 접근할 수 있다.

<Button
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/submit" />

 

728x90