1. 안드로이드 애플리케이션의 구성

애플리케이션은 컴포넌트로 구성된다.

컴포넌트의 종류

  • 액티비티
  • 방송 수신자
  • 서비스
  • 콘텐트 제공자

액티비티란?

  1. 사용자 인터페이스 화면을 가지고, 하나의 작업을 담당하는 컴포넌트
  2. 하나의 애플리케이션은 여러 개의 액티비티를 가짐
  3. 앱에서 하나의 화면 = 하나의 액티비티
  4. 모든 액티비티는 Aactivity 클래스를 상속받아 작성됨

서비스란?

  1. 백그라운드에서 실행되는 컴포넌트
  2. 오랫동안 실행되는 작업 or 원격 프로세스를 위한 작업에서 사용
  3. Service 클래스를 상속받아 작성됨

방송 수신자?

  1. 방송을 받고 반응하는 컴포넌트
  2. BroadcastReceiver 클래스를 상속받아 작성됨

콘텐트 제공자란?

  1. 데이터를 관리하고 다른 애플리케이션에 데이터를 제공하는 컴포넌트
  2. 데이터는 파일 시스템 or SQLite 데이터베이스 or 웹상에 저장 가능
  3. 다른 애플리케이션은 콘텐트 제공자를 통해 데이터를 쿼리하거나 변경 가능
  4. ContentProvider 클래스를 상속받아 작성됨

안드로이드 애플리케이션은 PC 애플리케이션과 달리 다른 애플리케이션의 컴포넌트를 이용할 수 있음. 즉 특정한 컴포넌트를 공유하여 사용이 가능함

인텐트란?

  1. 비동기적인 메시지로 "의도"라는 의미를 가짐
  2. 자신이 원하는 컴포넌트를 안드로이드 안에서 찾아서 실행할 수 있음

앱을 개발할 때는 4가지 컴포넌트를 전부 사용해야만 하는 것은 아님


2.앱의 작성 절차

앱의 구성

  • 자바 파일 = 앱의 로직
  • XML 파일 = 앱의 사용자 인터페이스
  • 이미지나 사운드 파일 = 리소스(자원)

앱의 작성 절차

  1. 사용자 인터페이스 작성
    XML 파일(레이아웃 파일)을 이용하여서 인터페이스 화면을 디자인함

  2. 자바 코드 작성

  3. 매니페스트 파일 작성
    컴포넌트를 기술하고 실행 시 필요한 권한을 지정


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.그레이들

그레이들란?

  1. 안드로이드 앱의 빌드(build) 도구
  2. 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.리소스

리소스란?

  1. 레이아웃, 이미지, 문자열 등
  2. 코드의 외부에 위치 -> 코드와 리소스를 분리하여 독립적으로 작성하기 위해 -> 안드로이드가 탑재된 장치들이 다양해지면서 언어나 화면의 크기에 따라 리소스를 다르게 하는 것이 필요하기 때문

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.애뮬레이터 로그캣


내용 정리

  1. 애플리케이션 - 컴포넌트의 조합으로 구성
    액티비티, 서비스, 콘텐트 제공자, 방송 수신자 등
  2. 코드와 리소스(화면 구성)는 철저하게 구분
    문자열 정의도 코드에 들어가지 않고 외부 리소스 파일에서 정의
  3. 코드와 리소스는 개발 도구에 의해 자동으로 생성되는 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
위젯 사용


추가 질문

  1. 프로세스를 격리시키는 운영체제는?
    = 가상 메모리 시스템 (Virtual Memory)

0개의 댓글