모바일 앱 개발/안드로이드

안드로이드 프로젝트 구조 (상세)

도툐리 2021. 4. 9. 18:18

1) 먼저 숲을 봅시다 : 안드로이드 폴더 구조 이해

 

위에 보시면 app폴더와 Gradle Scripts 폴더가 보이시죠?

이것이 프로젝트의 가장 큰 2덩어리 인데요.

 

app폴더에는 우리가 코딩해야할 파일들이 들어있고,

Gradle Scripts 에는 어플리케이션을 빌드하기위해 필요한 설정 옵션, 라이브러리 정보들이 들어있습니다.

 

 

app 폴더를 먼저 자세히 살펴보면,

위와 같이 manifests, java, res 폴더로 이루어져 있습니다.

 

- manifests : "AndroidManifest.xml"란 단하나의 파일이 담겨있는데요. 안드로이드의 컨트롤 타워라고 보시면 됩니다. 안드로이드 어플리케이션을 구동하는데 필요한 설정값을 관리해주는 곳입니다.

 

- java : 클래스를 관리하는 폴더입니다.

 

- res : Resource 폴더로 UI와 관련된 파일과 디자인 리소스, 문자열 리소스를 담고있는 폴더입니다.

 

안드로이드스튜디오에서는 폴더와 패키지라는 용어를 동일하게 사용하고 있는데요.

따라서 Project 안에있는 폴더를 지칭할때 "패키지"라는 용어를 사용하도록 하겠습니다.

 

 

"안드로이드 어플리케이션 프로젝트 구조는 크게

  manifest와 java, resource, 그리고 Gradle 패키지로 이루어져 있다"

 

 

 

 

2) 컨트롤타워가 있어요 : 

안드로이드 필수 설정 파일(manifests/AndroidManifest.xml, build.gradle)

 

사실 manifests는 개발하면서 자주 쓰는 부분이 아니기 때문에 자칫하면 잊기 쉬운 파일입니다.

하지만 프로젝트를 빌드하기위해서는 반드시 선행되어야 하는 필수 설정 요소이기도 하죠.

그렇다보니 이곳에서 특정 설정을 빼먹어서 에러가 생기거나 눈에 보이지 않는 버그가 발생 했을때 시간을 낭비하기 쉽상입니다. 따라서 파일을 살펴보고 필요할때마다 값을 입력해줘야 할때 까먹지 않고 추가해 줌으로써 잠재적으로 발생할 에러에 대비하는 것이 중요할 것 입니다.

 

 

manifests폴더 아래에 있는 AndroidManifest.xml파일을 열어볼까요?

(manifests/AndroidManifest.xml)

 

[참고] 

 

1<manifest> :

package= "com.korea.ultra.ultrakorea"

의미 - 패키지표시(폴더구조표시).

: com이라는 폴더 아래에 korea라는 폴더 아래에 ultra라는 폴더아래에 ultrakorea라는 프로젝트다!!라는 뜻입니다.

 

2<application> : 

icon="@mipmap/ic_launcher" 

의미 - mipmap폴더 아래에 있는 ic_launcher라는 파일을 앱 아이콘으로 설정한다.

theme="@style/AppTheme"

의미 - 이 어플리케이션에 AppTheme이라는 테마가 적용되어있다.

label="UltraKorea"

의미 - 아이콘에 표시될 앱이름은 UltraKorea라고 한다.

 

3~6<activity><intent-filter><action><category>

이부분 역시 MainActivity가 생성될때 셋트로 추가되는 부분.(프로젝트 생성시 자동으로 생성해줍니다.)

 

 

 

 

3) 중요한 나무들을 살펴 봅시다 : 안드로이드 파일 설명(java, xml)

 

java 패키지

사실상 우리가 자바라는 언어를 이용해 안드로이드 프로그래밍을 한다고 할 수 있는 부분은 이 패키지내에 java파일(파일명.java의 형식의 파일)을 만들고 수정하는 일을 지칭한다고 보면 되는데요. 우리의 앱이 작동하는 방식에 대해 정의하는 java 파일들이 모두 이곳에 들어있다고 보면 됩니다.

 

java 패키지내에 "com.korea.ultra.ultrakorea" 패키지를 열어봅시다.

(androidTest나 test가 적혀있지 않은 패키지를 엽니다.)

 

MainActivity라는 파일이 들어 있을텐데요. 그 파일을 더블클릭합니다.

(MainActivity.java)

MainActivity.java 자바는 모든 프로젝트에 필수적으로 있어야하는 기본 파일입니다.

 

AndroidManifest.xml에서 3~6번에서 MainActivity가 등록되있는 것을 위에서 잠깐 보았죠?

그 코드 덕분에 어플리케이션이 실행될때 가장 먼저 MainActivity가 실행될 수 있는 것입니다.

 

MainActivity.java의 본문을 보면 onCreate()라는 함수 하나가 정의되어있습니다.

그 안에 내용을 보면 setContentView(R.layout.activity_main); 이라는 코드가 보이는데요. 

( 의미 - layout 패키지 아래에 있는 activity_main.xml이라는 파일을 View로 연결한다. )

 

따라서 정리하면, 다음과 같습니다.

 

"Activity 파일과 Xml파일은 언제나 한쌍이다."

"Activity 파일에서 Xml파일을 연결해준다" 

 

xml 파일은 우리 눈에 보이는 UI를 구현하는 파일입니다.

디자이너로 부터 받은 디자인을 구현할때 xml파일을 만들면 되는 것이죠.

 

 

자, 이제 MainActivity.java를 살펴 봤으니

한쌍으로 대응하는 layout패키지 아래의 activity_main.xml파일을 살펴봐야겠죠?

(activity_main.xml)

"MainActivity 파일과 activity_main.xml파일은 언제나 한쌍이다."

"MainActivity 파일에서 activity_main.xml파일을 연결해준다" 

 

=> 이제 새로운 화면을 만들때마다

xxxActivity.java 파일을 만들고 그 파일안에서 activity_xxxx.xml 파일을 연결해 주면 되겠죠?

 

 

res폴더에는 layout, drawable, mipmap, values 패키지가 있는데요. 

 

사실 layout 패키지에 있는 파일들이 디자인의 뼈대를 담당하는 부분이며,

drawable, mipmap, values는 부수적인 저장소 입니다.

이미지파일이나 수치값들을 저장하고있는 곳이죠.

 

(res/drawable - 이미지 파일 저장 패키지)

res 패키지 아래에 drawable 패키지에는 이미지파일을 담습니다.

 

(res/mipmap - launcher 이미지(앱 아이콘) 저장 패키지)

res패키지 아래에 mipmap패키지에는 아이콘 이미지를 담습니다.

안드로이드 어플리케이션을 실행할때 누를 아이콘에 해당하겠죠.

위에서 설명했지만, 아이콘 이미지를 바꾸고 싶은 경우 이곳에 아이콘을 바꿔 넣으면 되고,

만약에 파일명도 바꾸고 싶다면 AndroidManifest.xml에서도 이름을 변경해주어야 합니다.

 

(res/values - 문자열, 색상값, 수치값, 스타일 저장 패키지)

(res/values/colors.xml - 컬러값 저장 파일)

(res/values/strings.xml - 문자열값 저장 파일)

(res/values/styles.xml - 스타일값 저장 파일)

--> 각 파일들은 .xml로 이루어져 있습니다.

 

 

 

4. 결론

 

1) 안드로이드 프로젝트는 app과 Gradle Scripts 로 이루어져 있다.

 

2)  app은 manifests, java, res 패키지로 이루어져 있다.

 

3)  manifests는 프로젝트 설정에 관한 부분,

     java는 프로그래밍 구현 부분,

     res는 레이아웃과 이미지, 문자열 리소스등 UI를 관장하는 부분이다.

 

4)  모든 안드로이드 프로젝트는 MainActivity를 기본적으로 갖고 있어야 하며   

     manifests/AndroidManifest.xml에서 설정해준다.

 

5)  화면을 만들때는 Activity파일(xxx,java파일)과 XML파일(xxxx.xml)을 쌍으로 만들어주고

     Activity파일에서 XML파일을 연결해준다.



 

 

 

출처: 

codeasy.tistory.com/6

 

[안드로이드스튜디오-2]안드로이드 프로젝트 구조 이해하기

안녕하세요, 순수하지않은개발자 입니다. 안드로이드 초급개발자 혹은 비개발자를 대상으로 "누구나 프로그래밍을 쉽게 배울수있다"라는 미션을 달성하기 위해 블로그 연재를 시작합니다. 사

codeasy.tistory.com