2. 안드로이드 앱 개발의 특징
컴포넌트를 기반으로 한 개발
안드로이드 앱 개발의 핵심은 컴포넌트이다.
안드로이드 앱 개발의 구조를 이해하려면 컴포넌트가 무엇이고, 어떻게 동작하는지 반드시 알아야 한다.
컴포넌트는 애플리케이션의 구성 요소다
컴포넌트는 안드로이드 앱 뿐만 아니라 여러 애플리케이션을 개발할 때 사용하는 개념이다. 컴포넌트를 한마디로 정의하자면 애플리케이션의 구성요소라고 할 수 있다.
컴포넌트는 애플리케이션을 구성하는 단위이다. 즉, 하나의 애플리케이션은 여러 컴포넌트로 구성된다. 컴포넌트가 어떤 형태인지는 상황에 따라 달라지는데, JAR 파일이나 DLL로도 개발한다.
안드로이드 앱의 기본 구조도 컴포넌트에 기반을 두므로 하나의 앱은 여러 컴포넌트로 구성된다. 그리고 안드로이드에서는 클래스로 컴포넌트를 개발한다. 즉, 하나의 클래스가 하나의 컴포넌트가 되는 것이다.
안드로이드 앱을 구성하는 클래스는 모두 컴포넌트인가?
안드로이드에서는 클래스로 컴포넌트를 개발한다고 했지만, 애플리케이션을 구성하는 모든 클래스가 컴포넌트라는 얘기는 아니다.
앱은 여러 클래스로 구성되는데, 그게 컴포넌트 클래스와 일반 클래스로 구분된다. 둘 다 개발자가 만드는 클래스지만 런타임 때 생명주기를 누가 관리하는가에 따라 차이가 있다.
앱이 실행될 때 클래스의 객체 생성부터 소멸까지 생명주기 관리를 개발자 코드에서 한다면 일반 클래스이다. 즉, 개발자가 임의의 목적으로 만든 클래스인 것이다. 그러나, 개발자가 만들긴 했지만 생명주기를 안드로이드 시스템에서 관리한다면 컴포넌트 클래스이다.
안드로이드 컴포넌트는 4종류이다
- 액티비티 : 화면을 구성하는 컴포넌트.
- 서비스 : 백그라운드 작업을 하는 컴포넌트. 화면에 출력되지 않는다. 화면과 상관없이 백그라운드에서 장시간 실행해야 할 업무를 담당한다.
- 콘텐츠 프로바이더 : 앱의 데이터를 공유하는 컴포넌트. 하나의 앱이 자신의 데이터를 다른 앱에 공유하려면 콘텐츠 프로바이더를 만들어야 하며, 다른 앱에서는 그 콘텐츠 프로바이더를 이용해 데이터에 접근한다. (ex. 카톡 프로필 사진 등록을 위해 갤러리 앱에 접속)
- 브로드캐스트 리시버 : 시스템 이벤트가 발생할 때 실행되게 하는 컴포넌트. 여기서 이벤트란, 화면에서 발생하는 사용자 이벤트가 아니라 시스템에 발생하는 특정 상황을 의미한다. (ex. 부팅 완료, 배터리 방전)
4가지 컴포넌트를 구분하는 방법
4가지 컴포넌트를 구분하는 방법은 간단하다.
컴포넌트는 앱이 실행될 때 안드로이드 시스템에서 생명주기를 관리하는 클래스지만, 개발자가 만들어야 하는 클래스이다.
개발자가 컴포넌트 클래스를 만들 때는 지정된 클래스를 상속받아야 하는데, 이 상위 클래스를 보고 구분할 수 있다.
액티비티는 Activitiy 클래스를 상속받아 만들고, 서비스는 Service, 콘텐츠 프로바이더는 ContentProvider, 브로드캐스트 리시버는 BraodcastReceiver 클래스를 상속받아서 만든다.
앱을 개발할 때 컴포넌트를 어떻게 구성해야 하는가?
앱을 만들 때 어떤 컴포넌트를 어떻게 구성하는지는 설계에 따라 달라지며 정해진 규칙은 없다.
컴포넌트는 앱 안에서 독립된 실행 단위다
컴포넌트는 애플리케이션 안에서 독립된 실행단위라는 중요한 특징이 있다.
독립된 실행단위란, 컴포넌트끼리 서로 종속하지 않아서 코드 결합이 발생하지 않는다는 의미이다.
카카오톡의 목록 화면과 채팅 화면을 예로 들면,
채팅방 목록 화면을 ListActivity 라는 클래스명으로, 채팅 화면을 ChatActivity 라는 클래스명으로 작성했고,
ListActivity에서 ChatActivity를 실행해 화면 전환을 한다고 가정해보자.
ListActivity에서 ChatActivity를 실행하는 것이므로 ListActivity에서 ChatActivity의 객체를 생성해 두 클래스를 결합해서 실행하면 될 것 같지만, 안드로이드에서 이 방법은 불가능하다. 컴포넌트의 생명주기를 안드로이드 시스템에서 관리하기 때문에 코드에서 직접 객체를 생성해 실행할 수 없기 때문이다.
그럼 어떻게 해야할까?
ListActivity에서 ChatActivity를 실행해야 한다면 안드로이드 시스템에 의뢰해서 시스템이 ChatActivity를 실행해야 한다.
즉, ListActivity와 ChatActivity를 코드로 결합해서 직저 실행하는 것이 아니라, 안드로이드 시스템에 의뢰해 두 클래스가 서로 종속되지 않고 독립해서 실행하게 해야한다.
앱 실행 시점이 다양하다
컴포넌트가 앱 내에서 독립해서 실행되는 특징 때문에 앱의 실행 시점이 다양할 수 있다. 앱은 사용자가 직접 실행하지 않아도 얼마든지 실행될 수 있다. (ex. 카카오톡 메세지 수신 알림을 터치하면 채팅 목록 화면을 거치지 않고, 바로 채팅화면이 열림.)
이처럼 앱의 실행 시점은 다양할 수 있다. 그래서 안드로이드 앱에는 메인 함수 개념이 없다고 말한다. 메인 함수란 앱의 단일 시작점을 의미하는데, 안드로이드 앱은 실행 시점이 다양해서 메인 함수 개념이 없다고 표현하는 것이다.
애플리케이션 라이브러리를 사용할 수 있다.
컴포넌트로 구성된 안드로이드 앱의 또 한 가지 특징은, 애플리케이션 라이브러리를 사용할 수 있다는 것이다.
애플리케이션 라이브러리란, 다른 애플리케이션을 라이브러리처럼 이용하는 것을 말한다.
카카오톡을 예로 들면, 채팅화면에서 카메라 앱을 실행해 사진을 찍은 뒤, 이 사진 데이터를 반환받아 다시 채팅화면에 출력할 수 있다. 이때, 카카오톡 앱에서 카메라 앱을 이용해 사진을 찍었으므로 카카오톡 앱이 카메라 앱을 라이브러리처럼 이용한 거라고 할 수 있다.
이처럼 안드로이드 앱은 사용자가 실행하지 않아도 실행될 수 있고, 실행 시점도 다양해서 다른 앱과 연동할 수 있다.
리소스를 활용한 개발
안드로이드 앱 개발의 또 다른 특징은 리소스를 많이 활용한다는 점이다.
리소스란, 코드에서 정적인 값을 분리한 것이다.
항상 똑같은 값이라면 굳이 코드에 담지 않고 분리해서 개발하는 것이다.
이렇게 하면 코드가 짧아져서 개발 생산성과 유지•보수성이 좋아진다.
이처럼, 안드로이드 앱을 개발할 때는 많은 요소를 리소스로 등록해서 사용한다.
문자열, 색상, 크기, 레이아웃, 이미지, 메뉴 등 많은 요소들을 리소스로 활용할 수 있다.
또한, 이미지 등 몇몇을 제외하면 대부분의 리소스는 XML 파일로 작성한다.
문자열 리소스 사용 예
textView.text = resources.getString(R.string.mytxt)
'개발 > 안드로이드' 카테고리의 다른 글
채팅 UI 화면 구현하기 (0) | 2025.04.20 |
---|---|
[안드로이드 앱의 기본구조] 3. 앱 구성 파일 분석 (1) | 2025.01.28 |
[안드로이드 앱의 기본구조] 1. 안드로이드 소개 (1) | 2025.01.28 |
[Google Login 기능 구현 1] build.gradle 세팅하기 (1) | 2025.01.26 |
데이터베이스 기초와 Firestore 문법 기초 (0) | 2025.01.20 |