안드로이드 프로그래밍은 크게 Code와 Resource로 구성되어있다. 여기서 Code란 일반 프로그래밍 코드와 같은 의미로 특별할 게 없지만 Resource라는 개념은 진지하게 짚어두고 넘어 갈 필요가 있을 것 같다.
 

 기본적으로 이클립스에서 안드로이드 프로젝트를 생성하면 왼쪽과 같은 구조를 갖게되는데 이 중에서 res 폴더가 바로 Resource의 약자로 리소스파일들이 저장 될 공간이다. 그럼 이 리소스 파일들은 대체 무엇일까. 바로 프로그램의 논리적인 부분 외적인 것, 즉 외형을 이루는 이미지 파일이나 문자열, 음악파일이나 동영상 등이 되겠다. 

 웹표준에 대한 개념이 있는 사람이라면 html코드와 css를 분리 하여 관리하는 것과도 비슷한 개념이라고 생각할 수 있을 것 같다. 즉, 디자이너와 프로그래머의 역할 분담과 관리가 편해 지는 것이다.
  
 이곳을 구성하는 모든 파일들은 컴파일 시에 프로그램 코드와 함께 컴파일 되며 위에있는 assets 폴더 역시 프로그램에 필요한 자원들을 저장하는 폴더 이지만 컴파일러에게 부담을 줄 수 있는 큰 파일들을 컴파일하지 않고 원본 그대로 저장하여 사용 할 수 있게 해 준다. (멀티미디어 파일들을 저장할 때 주로 사용한다.)

자 그럼 res폴더 내부 폴더들을 하나씩 살펴보자!
 1. drawable : 이미지가 저장될 폴더로 현재 종류별로 3가지가있는데, 이는 에뮬레이터(단말기)의 해상도에따라 자동으로 이미지의 크기에 맞게 출력 할 수 있게 나누어 준 공간으로 일반적으로는 그냥 drawable 폴더를 새로 만들어 하나만 사용하거나 drawable-hdpi폴더를 사용한다. (현재 출시되는 스마트폰의 대부분이 고해상도를 지원하기 때문이다.)

 2. layout : 프로그램의 화면(Activity) 구성을 정의 해 놓은 폴더이다. 각종 레이아웃과 뷰 들의 배치나 속성들이 정의된다.
 3. values : 프로그램에서 사용 될 문자열, 배열, 색상, 크기, 스타일 등의 값들을 정의하는 곳이다.

- 위 캡쳐에서는 나오지 않았지만 이 외에도 주로 사용하는 폴더들이 있으니 알아보자.
 4. menu : 메뉴 구성파일이 저장된다. (에뮬레이터의 메뉴버튼 정의)
 5. raw : 기타 2진 파일을 저장하는 장소로 보통 용량이 작은 멀티미디어 파일을 저장한다.
 6. anim : 애니메이션을 정의한다. (화면의 움직임)
 7. xml : 프로그램에서 사용할 임의의 xml문서를 정의.

 위의 리소스 들을 사용하기위해서는 고유의 ID값을 가져야 하는데, 이 ID값을 관리하는곳이 바로 그 유명한 R,java라는 녀석이다. 이녀석은 매우 민감하기 때문에 함부러 건드려서도 안되고 또 그렇다고 너무 신경을안쓰면 안된다. (안드로이드를 처음 시작하면서 이녀석 때문에 컴파일이 안된적이 한두번이 아니었다. 안될때는 눈 딱 감고 R.java를 지우고 저장을하면 자체적으로 R.java가 초기화 되고 컴파일이 이상없이 잘 되기도 한다.) 

 위의 코드가 바로 가장 기본적으로 R.java가 가지고있는 ID 들이다. 모두 정수 형태로 저장되는 것을 확인 할 수 있다.


PS. 간혹 레이아웃 구성을 할 때 다른 xml 파일 또는 다른 Activity에 사용될 컴포넌트(예를 들어 버튼)라고해서 같은 아이디를 줘도 상관이 없을 거라고 생각할 수도 있는데 모든 ID는 R.java라는 하나의 java파일에서 관리 하기 때문에 절대 중복되어서는 안된다. (이를 최대한 방지하기위해 자동으로 생성되는 ID 값은 상황에 맞게 수정을 하도록 하자)

+ Recent posts