Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 프래그먼트
- 지연초기화
- spacer
- 리스트뷰
- 빌드 프로세스
- Flutter
- 람다식
- 액티비티 생명주기
- StatefulWidget
- 추상메소드
- 반복문
- 패스트캠퍼스
- SizedBox
- margin
- 뷰바인딩
- padding
- expanded
- Kotlin
- setState
- 상속
- 두 수의 나눗셈
- button
- 변수
- Widget
- 안드로이드 스튜디오
- 인스턴스
- 프로그래머스
- StatelessWidget
- appbar
- If
Archives
- Today
- Total
Y_Ding
안드로이드 앱의 기본 구조 본문
안드로이드
- 구글에서 제작한 모바일 운영체제 (리눅스 기반)
- 전 세계 모바일 플랫폼 시장의 70~80% 차지
- 자바나 코틀린 언어를 이용해 개발
- 구글의 플레이 스토어뿐만 아니라 다양한 방법으로 사용자에게 배포 가능
- 안드로이드폰은 다양한 제조업체에서 만들 수 있음
- 개발자는 크기가 다양한 폰에서 앱이 똑같이 보이도록 호환성을 고려해야 함
- 자신이 만든 앱이 여러 장치에서 제대로 동작하는지를 점검해야 함
- 운영체제 버전별로 API레벨이 지정돼 있어서 소스코드에서는 대부분 API레벨을 이용
- 개발자는 운영체제 버전과 API레벨을 함께 알고있어야 함
컴포넌트
- 안드로이드 앱 개발의 핵심
- 애플리케이션을 구성하는 단위
- 하나의 애플리케이션은 여러 컴포넌트로 구성
- 안드로이드에서는 클래스로 컴포넌트를 개발
- 즉, 하나의 클래스가 하나의 컴포넌트
- 컴포넌트로 구성된 안드로이드 앱은 애플리케이션 라이브러리를 사용할 수 있음
- 애플리케이션 라이브러리? 다른 애플리케이션을 라이브러리처럼 사용하는 것
- 카톡 채팅 화면에서 카메라 앱을 실행해 사진을 찍은 뒤 이 사진 데이터를 반환받아 다시 채팅 화면에 출력할 수 있음
- 이 때 카톡 앱에서 카메라 앱을 이용해 사진을 찍었으므로 카톡 앱이 카메라 앱을 라이브러리처럼 이용한 것
- 안드로이드 앱은 사용자가 실행하지 않아도 실행될 수 있고 실행 시점도 다양해서 다른 앱과 연동할 수 있음
컴포넌트 클래스와 일반 클래스
- 앱은 여러 클래스로 구성되는데 크게 컴포넌트 클래스와 일반 클래스로 구분
- 둘 다 개발자가 만드는 클래스
- 런타임 때 생명주기를 누가 관리하는가에 따라 차이
일반 클래스 | 앱이 실행될 때 클래스의 객체 생성부터 소멸까지 생명주기 관리를 개발자 코드에서 함 컴포넌트가 아닌 개발자가 임의의 목적으로 만든 클래스 |
컴포넌트 클래스 | 개발자가 만들기는 했지만 생명주기를 안드로이드 시스템에서 관리 |
★ 컴포넌트는 애플리케이션 안에서 독립된 실행 단위
- 독립된 실행단위? 컴포넌트끼리 서로 종속되지 않아서 코드 결합이 발생하지 않음
- 예시로 '채팅방 목록 화면(ListActivity)'에서 '채팅 화면(ChatActivity)'를 실행해야 한다면 안드로이드 시스템에 의뢰해서 시스템이 ChatActivity를 실행해야 함 / 두 클래스가 서로 종속되지 않고 독립해서 실행되게 해야 함
- ListActivity에서 ChatActivity의 객체를 생성해 실행하는 것은 안드로이드에서 불가능한 방법
- 직접 실행 X , 간접 실행 O
- 독립된 실행 단위이기 때문에 앱 실행 시점이 다양함 (메인함수 개념이 없음)
- (예 : 알림창에서 메세지 수신 알림을 터치하면 바로 채팅화면이 뜸)
안드로이드 컴포넌트의 4가지 종류
- 액티비티, 서비스, 콘텐츠 프로바이더, 브로드캐스트 리시버 4가지로 구분
- 앱이 실행될 때 각각 다른 기능을 함
- 개발자가 컴포넌트 클래스를 만들 때는 지정된 클래스를 상속받아야 함
- 개발자가 만들고자 하는 앱의 기능과 화면을 고려해 필요한 만큼 구성
액티비티 | 화면을 구성하는 컴포넌트 앱이 실행되면 액티비티에서 출력한 내용이 안드로이드 폰에 나옴 |
서비스 | 백그라운드 작업을 하는 컴포넌트 화면 출력 기능 없음(서비스가 실행되더라도 화면에 출력되지 않음) 화면과 상관없이 백그라운드에서 장시간 실행해야 할 업무를 담당 |
콘텐츠 프로바이더 | 앱의 데이터를 공유하는 컴포넌트 만약 하나의 앱이 자신의 데이터를 다른 앱에 공유하려면 콘텐츠 프로바이더를 만들어야 함 다른 앱에서 그 콘텐츠 프로바이더를 이용해 데이터에 접근 (예시: 카카오톡 앱에서 프로필 변경 시, 갤러리 앱의 사진을 이용하는데 이 때 콘텐츠 프로바이더를 이용해서 데이터를 주고받음) |
브로드캐스트 리시버 | 시스템 이벤트가 발생할 때 실행되게 하는 컴포넌트 *이벤트 : 시스템에서 발생하는 특정 상황을 의미 (예: 부팅 완료, 배터리 방전) |
앱 개발의 특징
- 리소스를 많이 활용함
- 리소스? 코드에서 정적인 값을 분리한 것
- 앱에서 발생하는 데이터가 항상 똑같은 값이라면 굳이 코드에 담지 않고 분리해서 개발하는 것
- 이렇게 하면 코드가 짧아져서 개발 생산성과 유지,보수성이 좋아짐
- 문자열 이외에 색상,크기,레이아웃,이미지,메뉴 등 많은 요소를 리소스로 활용
문자열을 리소스로 등록하기
<string name="mytxt">
가나다라마바사
아자차카타파하
</string>
리소스 사용
textView.text = resources.getString(R.string.mytxt)
앱 구성 파일
- 프로젝트를 만들면 app이라는 모듈이 자동으로 생성
- 모듈 하나가 앱 하나
- 프로젝트는 여러 모듈을 묶어서 관리하는 개념
그래들(gradle)
- 안드로이드 앱의 빌드 도구
플러그인 선언
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
}
compileSdk 33
* 앱을 컴파일하거나 빌드할 때 적용할 버전 설정
* 안드로이드 SDK33 버전을 적용해서 컴파일 하라는 의미
applicationId 'com.example.androidlab'
* 앱의 식별자를 설정
* 고유한 문자열로 지정
* 만약 플레이 스토어에 똑같은 식별자를 이미 사용하고 있는 앱이 있다면
이 앱은 스토어에 등록되지 않음
minSdk 31
targetSdk 33
* targetSdk : 개발할 때 적용되는 SDK 버전
* minSdk : 이 앱을 설치할 수 있는 기기의 최소 SDK버전(31 버전까지 지원한다는 의미)
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 'androidx.core:core-ktx:1.8.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.5.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
implementation 'com.google.android.material:material:1.2.1'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
}
* 앱에서 이용하는 라이브러리의 버전 설정
* 개발자가 추가하는 오픈소스 라이브러리나 구글의 androidx 라이브러리 등은 모두 여기 선언
Manifest.xml
- 앱의 메인 환경 파일
- 이 파일에 설정한 대로 사용자의 폰에서 앱을 실행
- 개발부터 실행까지 중요한 역할
- 컴포넌트는 매니페스트 파일에 등록해야 시스템이 인지
res 폴더
- 앱의 리소스를 등록하는 목적으로 사용
- 리소스 파일명은 알파벳 대문자를 이용할 수 없음
- 모듈이 만들어지면 res 폴더 아래 4가지의 폴더가 기본으로 생김
- drawable : 이미지 리소스
- layout : UI 구성에 필요한 xml리소스
- mipmap : 앱 아이콘 이미지
- values : 문자열 등의 값으로 이용되는 리소스
- 리소스가 등록되면 R.java 파일에 int형 변수가 생김
- 개발자가 임의의 폴더를 사용할 수 없고, 지정된 폴더명을 사용해야 함
매인 액티비티 파일
class MainActivity : AppcompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
}
* AppcompatActivity는 Activity의 하위 클래스
* MainActivity는 액티비티 컴포넌트 클래스
즉, 화면 출력을 목적으로 하는 액티비티 클래스라는 의미
* MainActivity클래스 실행 -> onCreate()함수 자동 호출
* setContentView() 함수는 매개변수에 지정한 내용(R.layout.activity_main)을 액티비티 화면에 출력
'TodayILearned > Android&Kotlin' 카테고리의 다른 글
구글 지도앱 만들기 (2) | 2023.09.14 |
---|---|
사용자 위치 얻기 (0) | 2023.09.14 |
Room (0) | 2023.09.13 |
SharedPreferences (4) | 2023.09.13 |
팀프로젝트 TIL (0) | 2023.09.07 |