1. 안드로이드 애플리케이션의 구성
애플리케이션은 컴포넌트로 구성된다.
컴포넌트의 종류
액티비티란?
- 사용자 인터페이스 화면을 가지고, 하나의 작업을 담당하는 컴포넌트
- 하나의 애플리케이션은 여러 개의 액티비티를 가짐
- 앱에서 하나의 화면 = 하나의 액티비티
- 모든 액티비티는 Aactivity 클래스를 상속받아 작성됨
서비스란?
- 백그라운드에서 실행되는 컴포넌트
- 오랫동안 실행되는 작업 or 원격 프로세스를 위한 작업에서 사용
- Service 클래스를 상속받아 작성됨
방송 수신자?
- 방송을 받고 반응하는 컴포넌트
- BroadcastReceiver 클래스를 상속받아 작성됨
콘텐트 제공자란?
- 데이터를 관리하고 다른 애플리케이션에 데이터를 제공하는 컴포넌트
- 데이터는 파일 시스템 or SQLite 데이터베이스 or 웹상에 저장 가능
- 다른 애플리케이션은 콘텐트 제공자를 통해 데이터를 쿼리하거나 변경 가능
- ContentProvider 클래스를 상속받아 작성됨
안드로이드 애플리케이션은 PC 애플리케이션과 달리 다른 애플리케이션의 컴포넌트를 이용할 수 있음. 즉 특정한 컴포넌트를 공유하여 사용이 가능함
인텐트란?
- 비동기적인 메시지로 "의도"라는 의미를 가짐
- 자신이 원하는 컴포넌트를 안드로이드 안에서 찾아서 실행할 수 있음
앱을 개발할 때는 4가지 컴포넌트를 전부 사용해야만 하는 것은 아님
2.앱의 작성 절차
앱의 구성
- 자바 파일 = 앱의 로직
- XML 파일 = 앱의 사용자 인터페이스
- 이미지나 사운드 파일 = 리소스(자원)
앱의 작성 절차
-
사용자 인터페이스 작성
XML 파일(레이아웃 파일)을 이용하여서 인터페이스 화면을 디자인함
-
자바 코드 작성
-
매니페스트 파일 작성
컴포넌트를 기술하고 실행 시 필요한 권한을 지정
3.애플리케이션 분석
프로젝트 뷰의 중요한 폴더 or 파일
- java : 자바 소스 파일들이 들어있는 폴더
- Gradle : 빌드 시에 필요한 스크립트
- res : 각종 리소스(자원)들이 저장되는 폴더
drawable - 해상도별로 아이콘 파일들 저장
layout - 화면의 구성을 정의
values - 리소스 (문자열 등) 저장
menu - 리소스 (메뉴 등) 저장
- manifest : XML 파일로 앱의 전반적인 정보 (앱의 이름, 컴포넌트 구성 등)
자바 소스 관찰
- package kr.co.company.hello;
패키지 지정 문장
- import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
필요한 클래스를 포함하는 문장
- public class MainActivity extends AppCompatActivity {}
메인 액티비티 클래스 정의
- @Override
현재 메소드가 부모 클래스의 메소드를 재정의
- protected void onCrete(Bundle savedInstanceState)
초기화, 사용자 인터페이스 설정
- super.onCreate(savedInstanceState);
부모 클래스인 AppCompatActivity 클래스의 onCreate를 호출
- setContentView(R.layout.activity_main);
액티비티의 화면을 설정, (.)기호는 클래스의 멤버를 참조할 때 사용
XML 소스 관찰
res 폴더 아래 -> layout 폴더 -> activity_main.xml 파일
안드로이드 애플리케이션은 MainActivity의 onCreate()메소드를 호출되면서 실행이 시작됨
4.그레이들
그레이들란?
- 안드로이드 앱의 빌드(build) 도구
- build.gradle(Project) - 전체 프로젝트에 대한 빌드 설정
build.gradle(Module) - 앱을 빌드하는데 필요한 중요한 설정 사항
complieSdk 31 : 안드로이드 sdk 버전을 이용하여 컴파일
midSdk 21: 이 앱을 설치할 수 있는 장치의 최소 sdk 버전
targetSdk 31 : 개발할 때 목표로 하는 타켓 sdk 버전
sourceCompatibilty JavaVersion.VERSION_1_8 : 자바 버전
targerCompativilty JavaVersion.VERSION11
비주얼 도구
[Infer Contraionts] : 자동으로 위젯을 상하좌우에 붙임
5.리소스
리소스란?
- 레이아웃, 이미지, 문자열 등
- 코드의 외부에 위치 -> 코드와 리소스를 분리하여 독립적으로 작성하기 위해 -> 안드로이드가 탑재된 장치들이 다양해지면서 언어나 화면의 크기에 따라 리소스를 다르게 하는 것이 필요하기 때문
ConstraintLayout : 상대적 배치 관리자를 정의
-
<(-괄호 안은 무시)?xml version="1.0" encoding="uft-8"?>
이 문서가 sgml이나 다른 마크 업 파일이 아닌 xml 파일임을 나타냄
-
<androidx.constraionlayout.widget.ConstraintLayout ~ >
상대적 배치 관리자를 나타내는 문장
-
xmls:android
항상 최외곽 태그는 이 속성을 정의
-
android:id
유일한 아이디를 할당, 소스 코드에서 참조 가능
-
android:layout_width
화면에서의 폭 정의
-
android:layout_height
화면에서의 높이 정의
match_parent : 부모 화면을 다 차지
wrap_content : 콘텐츠를 표시할 정도만 차지
-
android:text
화면에 표시되는 텍스트 설정
리소스와 코드 연결
setContentView(R.layout.activity_main);
레이아웃 리소스의 식별자
6.매니페스트 파일
7.애뮬레이터 로그캣
내용 정리
- 애플리케이션 - 컴포넌트의 조합으로 구성
액티비티, 서비스, 콘텐트 제공자, 방송 수신자 등
- 코드와 리소스(화면 구성)는 철저하게 구분
문자열 정의도 코드에 들어가지 않고 외부 리소스 파일에서 정의
- 코드와 리소스는 개발 도구에 의해 자동으로 생성되는 R.java에 의해 연결
< Lab 비주얼 도구 사용해보기 > p.72~75
버튼을 누르면 전화를 거는 액티비티 실행
버튼을 클릭하면 "onclick" 속성에 입력되어 있는 메소드가 자동 호출
public void onClick(View v) {
//인텐트(안드로이드 시스템에 특정한 작업을 하는 액티비티를 찾음) 객체 생성
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse ("tel:010-1234-5678));
// 인텐트에 부합하는 액티비티를 찾아서 실행하여 화면에 나타남
startActivity(intent);
}
< Coding Challenge > p.76
Text View
Rating Bar
button
위젯 사용
추가 질문
- 프로세스를 격리시키는 운영체제는?
= 가상 메모리 시스템 (Virtual Memory)