안드로이드 4대 컴포넌트 | Android Basic Knowledge

hoya·2021년 10월 6일
0

Android Basic Knowledge

목록 보기
2/3
post-thumbnail

😮 컴포넌트?

앱의 필수 구성 요소이며, 여러 개가 모여 하나의 앱을 만든다.

자바의 클래스가 여러 개 모여 자바 파일이 되는 것과 마찬가지로, 안드로이드 앱 역시 여러 컴포넌트가 모여 완성되는 것이다. 컴포넌트의 물리적 모습은 클래스로, 클래스 하나가 컴포넌트라고 생각하면 된다.

🙋‍♂️ 그럼 클래스와 컴포넌트는 동일한건가요?

그렇지 않다. 안드로이드의 클래스는 컴포넌트와 일반 클래스로 나뉘어지는데, 이 둘의 차이점은 생명주기를 누가 관리하느냐에 있다.

  • 클래스 : 필요한 순간 new 연산자로 생성하고, 필요 없는 순간 null을 대입해 소멸한다. 즉, 개발자가 직접 생명주기를 관리한다.
  • 컴포넌트 : 안드로이드 시스템이 생성하고 필요 없는 순간 시스템이 소멸시킨다. 즉, 안드로이드 시스템이 생명주기를 관리한다.

컴포넌트는 앱 내에서 독립적인 실행단위이다.

생명주기를 시스템이 관리하더라도, 컴포넌트 역시 클래스이므로 다른 여러 클래스와 조합해야 하는데, 객체 지향 프로그래밍과는 조금 다르다.

결합도와 이어지는 이야기로, 기본적으로 객체 지향 프로그래밍에서 한 클래스에서 다른 클래스를 실행할 때 Hoya hoya = new Hoya() 와 같은 구문으로 객체를 생성 후 실행하는데, 이렇게 되면 결합도가 높아져 자유자재로 앱을 구현하기 힘들어진다.

이를 보완하기 위해 컴포넌트는 이런 구조로 구성되어 있다.

인텐트를 중간 매개체로 사용하여 서로 결합되지 않은, 즉 "느슨한 결합도" 상태로 한 컴포넌트가 다른 컴포넌트를 실행하는 것이다. 이 느슨한 결합도를 활용한 케이스는 무엇이 있을까?

우리가 늘 사용하는 카카오톡을 예로 들어서 설명해보자. 실생활에서 카카오톡을 접속하는 경우는 크게 두 가지가 있다.

  1. 내가 카카오톡의 아이콘을 눌러 카카오톡을 실행시킬 때
  2. 다른 사람이 나에게 메세지를 보냈을 때

기본적으로 1번처럼 유저가 안드로이드 앱의 아이콘을 눌러 앱을 실행시키는 경우가 있는가 하면, 2번과 같이 아이콘을 누르지 않아도 유저에게 알림을 주기 위해 앱이 실행되는 경우가 존재한다.

이처럼 앱의 실행 시점은 매우 다양한데, 컴포넌트가 독립적인 단위로 실행되기 때문에 이런 상황을 유연하게 대처할 수 있다.


앱 라이브러리 개념이 있다.

컴포넌트가 독립적인 실행 단위이기 때문에 얻을 수 있는 또 다른 장점이다. 코드 간 결합이 발생하지 않기에 외부 앱의 컴포넌트 역시 실행이 가능하다. 인스타그램을 예시로 들어보면, 프로필 사진을 업로드할 때 갤러리 앱을 실행하는 것을 볼 수 있다.

인스타그램에서 당연히 갤러리 앱을 만들진 않았을 것이다. 그러나, 위에서 이야기했듯이 컴포넌트 클래스는 독립적 실행 단위이기 때문에 인스타그램에서 갤러리를 구현한 것처럼 이용할 수 있다. 즉, 다른 앱을 라이브러리처럼 사용할 수 있다 해서 앱 라이브러리 개념이라고 불리게 된 것이다.

컴포넌트의 개념에 관해 살펴보았으니, 이제 어떤 종류의 컴포넌트가 있는지 알아보도록 하자.


💻 Activity

사용자와 상호작용 하기 위해 진입점 역할을 수행한다.

  • 모든 안드로이드 앱은 반드시 하나 이상의 액티비티를 포함시켜야 한다.
  • 사용자 화면, 즉 UI를 제공하는 컴포넌트로 가장 많이 작성된다.
  • 2개 이상의 액티비티를 화면에 보이게 할 수 없다.
  • 인텐트로 다른 앱의 액티비티 역시 접근이 가능하다.
  • 1개 이상의 View 혹은 View Group 을 포함시켜야 한다.

◼ 안드로이드를 개발하며 죽어라 보는 컴포넌트이기에 자세한 설명은 생략한다.

🔧 Service

사용자의 눈에 보이지 않는 백그라운드 영역의 작업을 처리한다.

  • 새로 만든 후 매니페스트 영역에 등록해주어야 한다.
  • 별도의 UI를 가지지 않는다.
  • 시작된 서비스는 앱이 종료되더라도 백그라운드에서 실행된다.
  • 네트워크를 통해 데이터를 가져올 수 있다.

◼ 우리가 흔히 사용하는 음악 스트리밍 앱을 생각하면 이해가 쉽다. 화면상에 앱이 나타나있지 않음에도 불구하고 음악이 재생되는 것은 서비스 컴포넌트의 역할이 있었기 때문이다.

📑 Content Provider

데이터를 관리하고 앱 간의 데이터를 공유한다.

  • 파일 시스템, SQLite 등 내장 메모리에 있는 데이터를 컨텐츠 프로바이더를 통해 접근한다.
  • 적절 권한이 주어진 앱이라면 다른 앱의 데이터를 변경할 수 있다.
  • 모든 데이터가 아닌 특정 데이터만 공유하도록 설정이 가능하다.
  • 앱 간 데이터 공유시 작은 데이터는 액티비티의 인텐트로 공유하고, 큰 데이터는 보통 컨텐츠 프로바이더를 통해 공유한다.
  • 데이터베이스에서 사용되는 CRUD 원칙을 준수한다.

◼ 사용하는 앱에서 주소록 데이터가 필요하다면 주소록에 접근해 데이터를 가져오는 것이 대표적인 예시이다.

📢 Broadcast Receiver

전화의 수신 혹은 발신, 배터리의 부족등 이벤트가 발생했을 때 반응한다.

  • 단말기에서 발생하는 다양한 이벤트 정보를 앱에 전달한다.
  • 통상적으로 UI를 지니고 있지 않고, 상태 표시줄 알림을 주로 생성한다.
  • 이벤트에 따라 원하는 작업을 수행한다.
  • 인텐트로 인해 한 번 생성되어 실행된 브로드캐스트 리시버는 10초 이내에 업무 처리가 종료되어야 한다.
  • 간단한 업무만 처리하거나 다른 액티비티 혹은 서비스를 호출하는 역할을 주로 수행한다.

◼ 대표적 예시로 카카오톡이 왔을 때 상단에 알림을 표시하는 것이 브로드캐스트 리시버의 역할 중 하나이다.


참고 및 출처

깡샘의 안드로이드 프로그래밍
안드로이드 (Android) 4대 컴포넌트(구성요소)
안드로이드 4대 컴포넌트 이해 [Youtube]

profile
즐겁게 하자 🤭

0개의 댓글