KOTLIN

[Kotlin] 공부 3일차 (2022-01-14)

HJ39 2022. 1. 15. 01:07

프로젝트 폴더 구성

메인 환경 파일

리소스 폴더

▷ 레이아웃 XML 파일

메인 액티비티 파일

 

  • 프로젝트 폴더 구성

안드로이드 앱 프로젝트를 만들면 많은 폴더와 파일들이 생성된다. 대부분 빌드 구성과 관련된 것이지만 

[모듈명 → src → main] 핵심 폴더들이 있다.

 

프로젝트를 만드는 경우 app이라는 모듈이 자동으로 생성된다. 모듈 하나가 앱 하나이며 프로젝트는 여러 모듈을 묶어서 관리하는 개념이다.  하나의 프로젝트에는 자동 생성되는 app모듈 외에 여러 모듈을 추가할 수 있지만 모듈을 앱 단위 이므로 새로운 앱을 개발하는 것과 같다. (일반적으로 하나의 모듈은 하나의 앱을 의미하지만 개발자가 원한다면 하나의 앱을 여러 모듈로 나누어 개발할 수 도 있다)

 

 

  • 모듈의 폴더 구성
이름 설명
build.gradle 빌드 설정 파일
AndroidManifest.xml 앱의 메인 환경 파일
res 리소스 폴더
activity_main.xml 레이아웃 XML 파일
MainActivity.kt 메인 액티비티 파일

그래 들(gradle)은 안드로이드 앱의 빌드 도구이다.

 

실제 탐색 창을 보면 build.gradle파일이 2개가 있다. 하나는 프로젝트 수준의 build.gradle(Project: AndroidLab)이고 다른 하나는 모듈 수준의 build.gradle(Module: AndroidLab.app)이다.

모듈 수준의 gradle파일을 열어보면 몇 가지 설정이 자동으로 등록되어있다. 이 값을 수정하거나 새로 추가하면서 빌드 환경을 설정한다.

 

  • 플러그인 선언
plugins{
	id 'com.android.application'
	id 'kotlin-android'
}

플러그인 선언은 자동적으로 선언되어있고 필요에 따라 추가할 수 있다.

 

  • 컴파일 및 빌드 버전 설정
compileSdkVersion 30
buildToolsVersion "30.0.2"

앱을 컴파일하거나 빌드할 때 적용할 버전을 설정

compileSdkVersion 30으로 지정되어 있으면 안드로이드 SDK 30 버전을 적용하여 컴파일하라는 의미이다.

 

  • 앱의 식별자 설정
applicationId "com.example.androidlab"

앱의 식별자를 설정

이곳에 지정한 문자열은 앱의 식별자가 도므로 고유한 문자열로 지정해야 한다.

더보기

만약 구글 플레이 스토어에 어떤 앱이 같은 식별자를 사용하는 경우 이 앱은 플레이스토어에 등록되지 않는다.

또, 스마트폰에 식별자가 같은 앱이 설치되어 있다면 이 앱은 설치되지 않는다

 

  • SDK 버전 설정
minSdkVersion 16	//앱을 설치할 수 있는 기기의 최소 SDK버전
targetSdkVersion 30	 //개발할 때 적용되는 SDK 버전

minSdkVersion 16은 16 버전까지 지원한다는 의미이고 그 아래 버전은 설치되지 않는다.

targetSdkVersion 30 은 30 버전의 SDK로 개발한다는 의미이다.

더보기

→ minSdkVersion은 1로 지정하지 않은 이유 

최소 지원 버전을 1로 설정하는 경우 모든 안드로이드 기기에 설치 가능하다. (이것을 하위 호환성이라고 한다) 하지만 만약 16 버전 아래 버전의 사용자가 0.001%라면 0.001%의 사용자까지 고려해서 하위 호환성을 갖출 것인지를 생각해야 한다.

그래서 minSdkVersion은 버전 점유율을 보고 중간 버전에서 결정하게 된다.

  • 앱의 버전 설정
versionCode 1
versionName "1.0"

초기값은 1이지만 앱이 사용자의 스마트폰에 설치되어 이용되다가 업데이트할 때 이 버전을 올려 다시 배포한다.

 

  • 컴파일 옵션
compileOptions {
	sourceCompatibility JavaVersion.VERSION_1_8
	targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
	jvmTarget = '1.8'
}

개발 언어의 버전을 설정

자바 버전 선언을 생략하면 기본적으로 1.6이 적용된다.

 

  • 라이브러리 설정
dependencies{
	implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
	implementation 'androidx.core:core-kts:1.3.2'
	implementation 'androidx.appcompat:appcompat:1.2.0'
}

targetSdkVersion에 명시한 안드로이드 SDK는 기본으로 적용되지만 개발자가 추가하는 오픈소스 라이브러리나 구글의 androidx 라이브러리 등 SDK라이브러리가 아닌 것들은 모두 dependencies에 선언해야 한다.

실제로 dependencies에 많은 라이브러리를 선언한다고 한다.

 

  • 메인 환경 파일

AndroidManifest.xml(매니페스트 파일)은 안드로이드 앱의 메인 환경 파일이다.

안드로이드 시스템은 매니페스트 파일에 설정한 대로 사용자의 폰에서 앱을 실행한다.

 

매니페스트 파일의 태그들로는 다음과 같다.

intent-filter, action, category, manifest, application, activity, service, receiver, provider 등이 있다 

  • mainfest 태그

→ 루트 태그이다.

→ xmlns는 XML의 네이스 페이스 선언이고 URL이 'http://schemas.android.com/apk/res/android'로 선언되어있다면 안드로이드 표준 네임스페이스이다.

→ package는 매니페스트 파일에 선언한 컴포넌트 클래스의 기본 패키 지명이다. 

 

  • application 태그

→ 앱 전체를 대상으로 하는 설정

→ icon 속성 : 지정한 이미지가 앱을 설치한 사용자의 폰에 보이는 실행 아이콘이다.

→ label 속성 : 앱의 이름을 등록한다.

→ theme 설정 : 앱에서 적용해야 하는 테마를 설정

컴포넌트는 매니페스트 파일에 등록해야 시스템이 인지한다.

 

  • activity 태그

→  name속성: 필수로 등록해야 한다, 클래스 이름을 등록

→  intent-filter 태그 생략 가능

더보기

intent-filter 태그 생략 시 앱이 설치가 되지만 앱 아이콘이 나오지 않는다.

 

이 외의  서비스, 브로드캐스트 리시버, 콘텐츠 프로바이더는 각각 service, receiver, provider태그로 등록한다.

컴포넌트 1개당 1개의 태그로 등록된다.

 

  • 리소스 폴더

res폴더는 앱의 리소스를 등록하는 목적으로 사용

R.java파일에 상수 변수로 등록된다.

 

  • drawable

→ 이미지 리소스

→ 리소스 식별하기 위해 int형 변수가 R.java파일에 등록

→ send.png파일을 drawable폴더에 만들었다면

    res/drawable/send.png는 R.drawable.send라고 이용한다.

 

  • layout

→ UI 구성에 필요한 XML리소스

→ 리소스 식별하기 위해 int형 변수가 R.java파일에 등록

→ drawable과 동일하게 layout폴더에 test.xml을 등록한 경우 R.layout.test라고 이용

 

  • mipmap

→ 앱 아이콘 이미지

 

  • values

→ 문자열 등의 값으로 이용되는 리소스

 

  • 리소스 파일 규칙

→ res하위의 폴더명은 지정된 폴더명을 사용해야 한다.

→ 각 리소스 폴더에 다시 하위 폴더를 정의할 수 없다.

→ 리소스 파일명은 자바의 이름 규칙을 위배할 수 없다.

→ 리소스 파일명에는 알파벳 대문자를 이용할 수 없다.

이러한 규칙 때문에 리소스 이름을 정의할 때 밑줄 '_'를 사용하는 경우가 일반적이다.

 

  • 레이아웃 XML 파일

→ androidx.constraintlayout.widget.ConstraintLayout태그

→ TextView태그 : 화면에 문자열을 출력하는 역할

 

  • 메인 액티비티 파일

매니페스트 파일의 설정값에 따라 폰에 앱을 설치한 후 앱의 아이콘을 터치하면 MainActivity.kt파일이 실행된다.

class MainActivity : AppCompatActivity(){
	override fun onCreate(savedInstanceState: Bundle?){
		super.onCreate(savedInstanceState)
		setContentView(R.layout.activity_main)
	}
}

→ AppCompatActivity를 상속받아 MainActivity라는 클래스를 정의되었고 AppCompatActivity는 Activity의 하위 클래스이다. 따라서 MainActivity는 액티비티 컴포넌트 클래스이다.(이 클래스는 화면 출력을 목적으로 하는 액티비티 클래       스라는 의미이다)

 

MainActivity클래스 실행 시 onCreate() 함수가 자동으로 호출된다.

setContentView함수는 매개변수에 지정한 내용을 액티비티 화면에 출력한다.

R.layout.activity_main을 지정했으므로 res/layout/activity_main.xml 파일에 구성된 내용을 화면에 출력한다.

 

여기까지 안드로이드 앱개발을 준비하는 것과 기본구조에 대하여 공부를 했는데 구조가 독특해서 아직 어색하다.

'KOTLIN' 카테고리의 다른 글

[Kotlin] 공부 6일차 (2022-01-18)  (0) 2022.01.18
[Kotlin] 공부 5일차 (2022-01-17)  (0) 2022.01.18
[Kotlin] 공부 4일차 (2022-01-15)  (0) 2022.01.16
[Kotlin] 공부 2일차 (2021-01-08)  (0) 2022.01.09
[Kotlin] 첫 공부 시작 (2022-01-07)  (0) 2022.01.08