본문 바로가기
TIL/Android

[Android] 안드로이드 스튜디오 프로젝트 폴더와 파일 구성, MainActivity.java 구조

by 왁왁s 2022. 10. 2.


 

프로젝트 뷰 구성

[ java ] 폴더

자바 소스 파일들이 들어있는 폴더로, 하위에는 패키지(package) 이름의 하위 폴더가 있다.

이는 프로젝트를 생성할 때 입력한 패키지 이름과 동일하다.

 

- 패키지 폴더 안에는 MainActivity.java로 메인 Java 소스가 들어가 있다. 

주로 액티비티(화면, activity_main.xml)에 어떤 일을 할 지 프로그래밍 하는 파일이다.

 

[ java (generated) 폴더 ]

Android Studio 3.2부터 제공되는 폴더이며 시스템 내부적으로 사용되기 때문에 신경 쓸 필요 없다.


[ res ] 폴더

각종 리소스들이 저장되는 폴더로, 앱 개발에 사용되는 이미지, 레이아웃, 문자열 등을 넣는다.

- drawable 폴더는 이미지 파일을 넣는 폴더이다.

- mimap 폴더는 디자인 화면이나 앱이 설치된 후에 보이는 런처 아이콘을 넣는다.

   - xxxhdpi, xxhdpi, xhdpi : 초고해상도 런처 아이콘 파일

   - hdip : 고해상도 런처 아이콘 파일

   - mdpi: 중해상도 런처 아이콘 파일

 

- layout 폴더는 화면의 구성인 액티비티를 구성하는 xml 파일을 넣는다. 기본적으로 activity_main.xml이 초기화면으로 지정되어 있으며, 추가로 화면이 필요하면 xml 형태로 layout 폴더에 저장한다.

- values 폴더는 

   - string.xml : 문자열을 저장

   - colors.xml : 색상표 지정

   - themes.xml : 스타일을 지정

 

- menu엔 메뉴 리소스가 저장

 

[ res (generated) 폴더 ]

Android Studio 3.2부터 제공되는 폴더이며 시스템 내부적으로 사용되기 때문에 신경 쓸 필요 없다.

 

 

[ manifest ] 폴더

AndroidManifest.xml 파일이 들어 있는데, 

XML 파일에 앱의 전반적인 정보, 즉 앱의 이름이나 컴포넌트 구성과 같은 정보를 가진다.

 

[ Gradle Scripts ] 폴더

그레이들(Gradle)은 빌드 시에 필요한 스크립트이다.

- build.gradle (Module: app) : 빌드 스크립트의 핵심 파일로 컴파일 버전, 실행되는 최하 버전, 컴파일 라이브러리 등을 등록한다.

- local.properties : 컴파일되는 SDK의 정보가 들어 있다.

- gradle.properties : JVM 관련 메모리가 설정되어 있다.

 

MainActivity.java 파일 분석

 

 

package ex.app.hello;

- 패키지를 선언하는 문장으로, 패키지(package)는 서로 관련 있는 클래스들을 모아놓는 컨테이너로서 위의 문장은 패키지를 하나 생성하여 현재의 클래스를 이 패키지에 넣겠다는 것을 의미한다.

 

 

import androidx.appcompat.app.AppCompatActivity;

 

- import 문장은 외부의 패키지나 클래스를 소스에 포함시킬 때 사용한다. androix가 붙은 패키지는 JetPack에 속하는 클래스로 호환성을 위해 최근에 사용이 권장되는 패키지를 뜻한다.

 

public class MainActivity extends AppCompatActivity { ... }

- 클래스는 객체 지향 프로그래밍에서 가장 기본이 되는 최소 단위이다. 액티비티는 Activity 클래스로 생성된다. AppCompatActivity는 Activity 클래스의 자식 클래스로, AppCompatActivity를 상속 받기 때문에 MainActivity 클래스도 액티비티가 된다.

 

액티비티(Activity)는 안드로이드에서 애플리케이션을 구성하는 컴포넌트 중 하나로, 사용자가 화면을 통하여 어떤 작업을 할 수 있도록 하는 컴포넌트이다. 애플리케이션은 여러 액티비티를 가질 수 있지만, 사용자는 오직 하나의 액티비티 하고 상호작용을 한다.

 

@Override

- @Override는 현재 메소드가 부모 클래스의 메소드를 오버라이드(재정의)하였다는 것을 컴파일러에게 전달한다. @Override를 쓰는 이유는 메소드의 이름 한글자라도 틀리면 메소드 오버라이드가 되지 않기 때문에, 컴파일러에게 오버라이드 할 것을 알려 재정의가 성립되지 않으면 경고 메시지를 호출하기 위함이다.

 

protected void onCreate(Bundle savedInstanceState) { ... }

- onCreate( )  메소드는 안드로이드 시스템에서 액티비티가 생성되는 순간에 딱 한번만 호출되며 가장 먼저 시작하는 메소드이다. 한번 호출되기 때문에 모든 초기화와 사용자 인터페이스 설정을 onCreate( )에서 이루어져야 한다. 

 

savedInstanceState 매개변수는 애플리케이션이 이전에 실행되었던 상태를 전달해 준다.

 

super.onCreate(savedInstanceState);

부모 클래스인 AppCompatActivity 클래스의 onCreate( )를 호출한다. super 키워드는 상속 관계에서 부모 클래스를 나타내는 키워드다.

 

setContentView(R.layout.activity_main);

setContentView(  )는 액티비티의 화면을 설정하는 함수이다. R.layout.activity_main을 액티비티 화면으로 하겠다는 의미다. 점 연산자(.)는 클래스 멤버를 참고할 대 사용하며, R 이라는 클래스에 layout이라는 멤버가 있고 그 안에 activity_main이 있을 것이다.

 

 

 

 

 

댓글