Table of Contents
목차
안드로이드 앱 개발의 특징
컴포넌트 기반의 개발
안드로이드 앱 개발의 핵심은 컴포넌트 component 이다.
[컴포넌트는 애플리케이션의 구성 요소임]
- 컴포넌트는 안드로이드 앱뿐만 아니라 여러 애플리케이션을 개발할때 사용하는 개념
- 컴포넌트를 한마디로 정의하면 애플리케이션의 구성 요소라고 할 수 있음
- 컴포넌트는 애플리케이션이 아니라 애플리케이션을 구성하는 단위
- 즉, 하나의 애플리케이션은 여러 컴포넌트로 구성 됨
- 안드로이드 앱의 기본 구조도 컴포넌트에 기반을 두므로 하나의 앱은 여러 컴포넌트로 구성됨.
- 그리고 안드로이드에서는 클래스로 컴포넌트를 개발함.
- 즉, 하나의 클래스가 하나의 컴포넌트가 되는 것임
[안드로이드 앱을 구성하는 클래스는 모두 컴포넌트인가?]
- 애플리케이션을 구성하는 모든 클래스가 컴포넌트는 아님
- 앱은 여러 클래스로 구성되는데 크게 컴포넌트 클래스와 일반 클래스로 구분함
- 둘다 개발자가 만드는 클래스지만 런타임 때 생명주기를 누가 관리하는가에 따라 차이가 있음
- 일반 클래스
- 앱이 실행될 때 클래스의 객체 생성부터 소멸까지 생명주기 관리를 개발자 코드에서 함
- 안드로이드 앱의 구성 요소인 컴포넌트가 아닌 개발자가 임의의 목적 으로 만든 클래스
- 컴포넌트 클래스
- 개발자가 만들기는 했지만 생명주기를 안드로이드 시스템 에서 관리
[안드로이드 컴포넌트의 4가지 종류]
- 컴포넌트는 액티비티, 서비스, 콘텐츠 프로바이더, 브로드캐스트 리시버 이렇게 4가지로 구분됨
- 컴포넌트는 앱이 실행될 때 각각 다른 기능을 함
- 액티비티
- 화면을 구성하는 컴포넌트
- 앱의 화면을 안드로이드폰에 출력하려면 액티비티를 만들어야 함
- 앱이 실행되면 액티비티에서 출력한 내용이 안드로이드폰에 나옴
- 서비스
- 백그라운드 작업을 하는 컴포넌트
- 화면 출력 기능이 없으므로 서비스가 실행 되더라도 화면에는 출력되지 않음
- 서비스 컴포넌트는 화면과 상관없이 백그라운드에서 장시간 실행해야 할 업무를 담당함
- 콘텐츠 프로바이더
- 앱의 데이터를 공유하는 컴포넌트
- 안드로이드폰에는 많은 앱이 설치되어 있으며 앱 간에 데이터를 공유 가능
- 하나의 앱이 자신의 데이터를 다른 앱에 공유하려면 콘텐츠 프로바이더를 만들어야 하며, 다른 앱에서는 그 콘텐츠 프로바이더를 이용해 데이터에 접근함
- 예를 들어 카카오톡 앱에서 프로필을 변경할 때 갤러리 앱의 사진을 이용할 수 있는데, 이때 콘텐츠 프로바이더를 이용해 데이터를 주고받음
- 브로드캐스트 리시버
- 시스템 이벤트가 발생할 때 실행되게 하는 컴포넌트
- 여기서 이벤트는 화면에서 발생하는 사용자 이벤트가 아니라 시스템에서 발생하는 특정 상황을 의미
- 예를 들어 부팅 완료, 배터리 방전 같은 상황임
[4가지 컴포넌트 구분 방법]
- 컴포넌트는 앱이 실행될 때 안드로이드 시스템에서 생명주기를 관리하는 클래스지만 개발자가 만들어야 하는 클래스임
- 개발자가 컴포넌트 클래스를 만들 때는 지정된 클래스를 상속받아야 하는데 이 상위 클래스를 보고 구분할 수 있음
- 액티비티는
Activity
클래스를 상속받아 만듦 - 서비스는
Service
클래스를 상속받아 만듦 - 콘텐츠 프로 바이더는
ContentProvider
클래스를 상속받아 만듦 - 브로드캐스트 리시버는
BroadcastReceiver
클래스를 상속받아서 만듦
[main 함수가 없다]
- 앱은 실행 시점이 다양함
- 컴포넌트가 앱 내에서 독립해서 실행되는 특징 덕분에 앱의 실행 시점이 다양할 수 있음
- 일반적으로 앱을 설치하면 홈 화면에 아이콘이 나오고 그 아이콘을 사용 자가 터치해서 실행함
- 예를 들어 사용자가 알림 창에서 메시지 수신 알림을 터치하면 바로 채팅 화면이 열립니다.
이처럼 앱의 실행 시점은 다양함 - 그래서 안드로이드 앱에는 메인 함수 main function 개념이 없다고 말함
- 메인 함수란 앱의 단일 시작점을 의미하는데 안드로이드 앱은 실행 시점이 다양해서 메인 함수 개념이 없다고 표현하는 것임
리소스를 활용한 개발
앞에서 살펴본 컴포넌트와 함께 안드로이드 앱 개발의 또 다른 특징은 리소스를 많이 활용 한다는 점임
리소스
- 코드에서 정적인 값을 분리한 것
- 앱에서 발생하는 데이터나 사용자 이벤트에 따른 동적인 값이 아니라 항상 똑같은 값이라면 굳이 코드에 담지 않고 분리해서 개발하는 것이죠.
➡ 이렇게 하면 코드가 짧아져서 개발 생산성과 유지·보수성이 좋아짐
[문자열을 리소스로 이용]
대표적인 예가 문자열을 리소스로 이용하는 것임
만약 화면에 애국가 가사를 출력한다면 다음처럼 코드를 작성함
/문자열을 코드로 작성하기/
textView.text = ”””
동해 물과 백두산이 마르고 닳도록
하느님이 보우하사 우리나라 만세
무궁화 삼천리 화려 강산 대한 사람,
대한으로 길이 보전하세
“””
그런데 문자열이 항상 똑같다면 코드에 담지 않고 다음처럼 리소스로 등록해서 사용하는 게 효율적
/문자열을 리소스로 등록하기/
<string name=”mytxt”>
동해 물과 백두산이 마르고 닳도록
하느님이 보우하사 우리나라 만세
무궁화 삼천리 화려 강산 대한 사람,
대한으로 길이 보전하세
</string>
이렇게 리소스로 등록해 두면 다음처럼 간편하게 사용 가능 /kotlin /문자열 리소스 사용 예/ textView.text = resources.getString(R.string.mytxt) ```
[특징]
- 이처럼 안드로이드 앱을 개발할 때는 많은 요소를 리소스로 등록해서 사용함
- 앞으로 자세히 다루겠지만 문자열 이외에 색상, 크기, 레이아웃, 이미지, 메뉴 등 많은 요소를 리소스로 활용할 수 있음
- 또한 이미지 등 몇몇을 제외하면 대부분 리소스는 XML 파일로 작성함