[개념 콕] 안드로이드 4대 컴포넌트

내일배움캠프 수료생이 개발에 꼭 필요한 핵심 개념만 콕 집어 드립니다.
Jun 05, 2024
[개념 콕] 안드로이드 4대 컴포넌트
✍🏼
안드로이드 입문자 여러분, 정보가 너무 많고 배워야 할 것도 산더미라 어디서부터 시작해야 할지 막막하신가요? 내일배움캠프 수료생들이 4개월 동안 배운 엄선된 안드로이드 핵심 개념을 직접 정리해서 알려 드립니다. 공부하다 막히거나 헷갈리는 개념이 있다면 개념 콕으로 정리해보세요.
 

안드로이드 4대 컴포넌트란?

컴포넌트(Component)란?

안드로이드 4대 컴포넌트라는 말을 알아보기에 앞서 우리는 컴포넌트가 무엇인지 알 필요가 있습니다. 안드로이드 뿐 아니라 여러가지 기기에서 사용되는 응용프로그램을 애플리케이션이라고 부르는데, 이러한 애플리케이션은 컴포넌트라는 구성요소들이 조합되어 만들어집니다.
즉, 컴포넌트란 애플리케이션을 구성하는 하나의 구성요소이자 단위입니다. 안드로이드 애플리케이션 역시 애플리케이션이기 때문에 이러한 컴포넌트들로 구성됩니다.
 

그렇다면 안드로이드 4대 컴포넌트는 무엇일까?

인터넷에 안드로이드 컴포넌트에 대해 검색하면 안드로이드 4대 컴포넌트라는 말을 쉽게 볼 수 있습니다. 안드로이드의 여러가지 컴포넌트중 중요한 컴포넌트 4가지를 나타내기 때문에 4대 컴포넌트라고 불리는 것일까요? 아닙니다. 안드로이드 애플리케이션을 구성하는 컴포넌트의 종류가 4가지이기 때문에 ‘안드로이드 4대 컴포넌트’라 불리고 있습니다. 따라서 이들의 용도는 각각 다릅니다.
 

안드로이드 4대 컴포넌트의 용도

1. 액티비티(Activity)

Activity는 애플리케이션의 화면을 구성하는 컴포넌트로 하나의 Activity는 하나의 화면을 나타내며, Activity에서 출력한 내용이 안드로이드 디바이스의 화면에 나타납니다.
 

2. 서비스(Service)

애플리케이션을 사용하며 사용자가 입력한 동작에 대해 작업이 실행되고 결과가 출력되는 상호작용의 과정을 포그라운드 작업(Foreground Job)이라고 합니다. 한편 포그라운드 작업과는 반대로 사용자의 요청없이도 일어나는 작업들이 있습니다. 예를들어 실시간으로 SNS를 업데이트 한다거나, 메신저의 채팅창을 주기적으로 확인하는 작업처럼 사용자가 일일히 요청하지 않아도 실행되는 작업들이 있는데, 이를 백그라운드 작업 (Background Job)이라고 하는데요. 서비스 컴포넌트는 이런 백그라운드 작업을 위한 컴포넌트로, ‘화면에 출력되지 않는’ 컴포넌트입니다. 서비스 컴포넌트에는 화면에 출력되지 않고 백그라운드에서 실행되어야 하는 작업들이 작성되며, 액티비티없이 서비스로만 구성된 화면이 없는 애플리케이션도 존재합니다.
 

3. 콘텐트 프로바이더(Content Provider)

안드로이드에서 앱 간 데이터를 공유하기 위해 사용되는 컴포넌트로, 앱과 앱이 데이터를 공유하기위한 기준을 제공하는 컴포넌트입니다. 만약 어떤 앱에서 다른 앱에 데이터를 공유하고 싶을때 콘텐트 프로바이더를 만들어서 공유할 수 있으며, 다른 앱에서는 해당 앱의 콘텐트 프로바이더를 통해 데이터에 접근할 수 있습니다. 인텐트로 공유하기 힘든 용량이 큰 데이터를 공유할때 주로 사용합니다.
 

4. 브로드캐스트 리시버(Broadcast Receiver)

안드로이드에서 다수의 컴포넌트나 애플리케이션에 메시지를 전송하는 방법을 브로드캐스트(Broadcast)라고 부르는데, 브로드캐스트는 시스템 이벤트(배터리부족, 인터넷 연결 등)가 발생했을 경우 혹은 개발자가 앱을 개발하며 필요해서 직접 설정한 경우(메시지 도착 등)에 메시지를 전송합니다. 브로드캐스트 리시버는 이러한 브로드캐스트 메시지를 수신해 필요한 작업을 수행하기 위해 사용하는 컴포넌트입니다.
 
 

안드로이드 앱 컴포넌트의 구현 방식

안드로이드 앱 컴포넌트는 클래스를 사용해 구성되며 이렇게 구성된 클래스를 컴포넌트 클래스라고 부릅니다. 안드로이드 앱은 여러가지의 클래스들로 이루어지는데, 모든 클래스는 개발자가 직접 생성합니다. 하지만 해당 클래스로 생성된 객체의 생명주기를 어떻게 관리하느냐에 따라 컴포넌트 클래스와 일반 클래스로 분류할 수 있습니다.
 

컴포넌트 클래스

컴포넌트 클래스는 해당 클래스를 사용한 객체의 생성부터 소멸까지, 모든 생명주기를 안드로이드 시스템에서 관리합니다. 컴포넌트 클래스를 생성하려면 반드시 지정된 클래스를 상속받아야하며, 이렇게 상속받은 클래스의 이름을 보고 해당 클래스가 컴포넌트 클래스인지 일반 클래스인지 구분할 수 있습니다.
 

일반 클래스

일반 클래스란 클래스를 사용한 객체의 생성과 소멸을 개발자가 코드내에서 직접 관리하는 클래스로, 컴포넌트 클래스의 상위 클래스를 상속받지 않는 모든 클래스를 말합니다.
 
 

안드로이드 앱 컴포넌트의 특징

안드로이드를 구성하는 컴포넌트는 개발자의 의도에 따라 결정되며, 반드시 모든 컴포넌트를 사용할 필요는 없습니다. 필요에 따라 여러가지 컴포넌트가 사용되기도 하지만, 어떨때는 하나의 컴포넌트만 사용하는 것도 가능합니다. 만들고자 하는 앱의 기능과 화면에 따라 적절하게 구성해서 사용하면 됩니다.
컴포넌트의 가장 큰 특징 중 하나는 각각의 컴포넌트들이 앱 내부에서 실행되는 ‘독립적인 단위’라는 것입니다. 쉽게 말하자면 각각의 컴포넌트는 서로 결합된 부분이 없기 때문에 각자 독립적으로 실행될 수 있습니다.
예를 들어 컴포넌트 클래스A에서 컴포넌트 클래스 B를 실행시킨다고 생각해봅시다. 이 경우 컴포넌트 클래스 A에서 컴포넌트 클래스 B의 객체를 생성해서 실행될까요? 일반 클래스라면 그랬겠지만 컴포넌트 클래스의 경우는 다릅니다. 컴포넌트 클래스는 생명주기를 시스템에서 관리하기 때문에 코드 내부에서 직접 객체를 생성하지 않으며, 시스템 요청을 통해 다른 컴포넌트 클래스 객체를 생성하며 이동하는 방식으로 전환됩니다.
notion image
그렇기 때문에 두 클래스가 서로에게 연관없이 실행이 가능하게 됩니다. 이러한 특성 덕분에 안드로이드는 앱을 실행할때 원하는 진입 시점을 자유롭게 설정할 수 있습니다. 즉, 앱 아이콘을 실행하면 메인 화면이 실행되지만, 메시지 알림을 클릭하면 메시지 화면으로 이동하는 카카오톡처럼 진입시점을 원하는 대로 설정할 수 있습니다.
그리고 안드로이드는 다른 앱을 라이브러리처럼 이용할 수 있습니다. 쉽게 말하자면 다른 앱을 직접 실행하지 않아도 해당 앱을 실행시켜 접근할 수 있다는 것입니다. 실행 시점이 다양하기 때문에 개발자가 원하는대로 다른 앱의 원하는 화면으로 연동할 수 있습니다.
 
 

액티비티(Activity)와 프래그먼트(Fragment)의 차이점

액티비티(Activity)란?

액티비티(Activity)는 안드로이드 애플리케이션의 화면 하나를 나타내는 구성요소로 사용자는 액티비티가 생성한 UI를 통해 애플리케이션과 상호 작용할 수 있습니다. 또한 각 액티비티는 독립적이어서 앱이 사용자와 상호작용하기 위한 진입점 역할을 하기도 합니다.
액티비티는 하나 이상의 뷰(View)나 뷰 그룹(View Group)을 가지고 있어야 하며, 이를 통해 UI를 표현합니다.
 
notion image
 

프래그먼트(Fragment)란?

프래그먼트(Fragment)는 액티비티(Activity)를 사용해 화면을 구성하며 발생하는 문제점을 보완하기위해 탄생한 클래스입니다.
액티비티를 사용해 화면을 구성하는 경우 크게 2가지의 문제점이 있습니다.
1) 한개의 액티비티가 하나의 화면을 나타내다보니 똑같은 UI를 가지고 있지만 콘텐츠가 다른 경우 해당 화면을 위해 비슷한 코드의 새로운 액티비티를 생성해야 합니다.
2) 디바이스가 다양해지면서 화면의 크기가 천차만별로 달라졌습니다. 특히 태블릿 PC는 스마트폰의 화면에 비해 상당히 큰 화면을 가지고 있습니다. 즉, 최적화를 위해 화면에 한 개 이상의 UI를 그려야 하는 것이죠. 하지만 액티비티는 화면 하나만 나타내는 것이 가능하기 때문에 이러한 부분에서 큰 어려움을 가지고 있습니다.
 
notion image
 
프래그먼트는 이러한 문제점을 해결할 수 있습니다. 프래그먼트는 UI를 모듈 형식으로 나누어 관리할 수 있도록 해주는 클래스로, 화면의 일부분만 차지하기 때문에 하나의 액티비티에 여러 개의 프래그먼트를 사용할 수 있습니다. 전체를 덮는다고 해도 전체 ‘면적’만 차지할 뿐, 화면 자체를 차지하는게 아니라는 의미입니다.
쉽게 이야기하자면 액티비티에 뷰나 뷰 그룹과 같이 프래그먼트를 생성해 화면을 그릴 수 있으며, 다시 프래그먼트 내부에 뷰나 뷰 그룹을 사용해 화면을 그릴 수 있습니다.
notion image
또한 컴포넌트 클래스가 아니기 때문에 각각의 클래스가 독립성을 지니지 않아 UI가 똑같은 화면의 경우 프래그먼트를 재사용해 불필요한 액티비티를 생성할 필요 없이 화면을 구성합니다.
 
그렇다면, 프래그먼트만 써도 될까요?
아닙니다. 프래그먼트는 액티비티에 종속된 클래스이기 때문에 반드시 액티비티 내에서만 사용이 가능하며, 생명주기 또한 액티비티에 종속되어 단독으로 사용하는 것은 불가능합니다. 한마디로 액티비티라는 화면이 있어야 프래그먼트라는 UI의 조각을 붙일 수 있는 것입니다.
 
그렇다면, 프래그먼트는 컴포넌트인가요?
앞서 언급한 것처럼 시스템에서 클래스 객체의 생명주기를 관리하는 것을 컴포넌트 클래스라고 합니다. 프래그먼트 역시 개발자가 생명주기를 관리하지 않습니다. 개발자가 코드로 직접 프래그먼트의 추가나 제거, 교체같은 작업을 요청하더라도 시스템에 요청을 통해 진행되기 때문에 개발자가 직접 프래그먼트 객체의 생명주기에 관여하지 않습니다. 즉, 시스템이 프래그먼트 객체의 생명주기를 관리합니다.
그렇다면 프래그먼트는 컴포넌트 클래스일까요? 아닙니다. 앞서 말했듯 프래그먼트는 해당 프래그먼트를 선언한 액티비티에 종속되어 있기 때문에 생명주기는 항상 액티비티를 통해 간접적으로 관리됩니다. 따라서 프래그먼트는 독립적으로 존재할 수 없습니다. 즉, 앱의 진입점이 될 수 없는 것이죠. 앱의 구성요소인 컴포넌트의 조건을 충족할 수 없기 때문에 컴포넌트라고 할 수 없습니다.
 

액티비티와 프래그먼트의 차이

액티비티는 안드로이드 앱의 화면을 구성하는 구성요소이고, 프래그먼트는 액티비티에 종속된 화면의 전체 혹은 일부를 표시하는 구성요소입니다.
 
  • 액티비티
    • 화면을 구성하기 위해 반드시 필요합니다.
    • 재사용이 불가능하며, 다른 화면이 필요할경우 새로운 액티비티를 생성해야 합니다.
    • 시스템에 의해 생명주기가 관리됩니다.
  • 프래그먼트
    • 화면의 일부분을 나타내는데 사용합니다. 화면 자체를 생성하는게 아니기 때문에 액티비티 내부에서 사용되어야 합니다.
    • 화면 자체가 아닌 화면을 표시하는 부분이기 때문에 다른 콘텐츠를 사용해 재사용하는 것이 가능합니다.
    • 프래그먼트 역시 고유한 생명주기를 가지고 있지만 액티비티의 생명주기 내에서 관리됩니다.
 
 
 

내일배움캠프는 개발에 필요한 핵심만 배웁니다

지금까지 꼭 필요한 안드로이드 지식에 대해 알아보았습니다. 내일배움캠프에서는 전문가들이 선별한 핵심 안드로이드 개발 지식으로 개발 공부도, 취업도 보다 효율적으로 할 수 있는데요. 국내 유수의 IT기업 출신 튜터님들과 실습 위주의 독보적인 커리큘럼으로 개발자 취업을 체계적으로 준비해보세요. 내일배움캠프 4개월, 여러분 인생의 가장 큰 터닝 포인트입니다.
 
 
 
CREDIT
글 | 배영수 내일배움캠프 수료생 편집 | 정효재 팀스파르타 에디터
 
 

취업 준비, 어디서부터 시작해야 할지 모르겠다면?

 
🧐비전공자인데 IT 업계 취업할 수 있을까?
😟프로젝트 경험이 부족한데, 어떻게 준비해야 할까?
🥺IT 기업으로 이직하고 싶은데 뭐부터 시작해야 할까?
 
이런 고민을 하고 있다면, 내일배움캠프의 IT 취업 컨설팅을 받아보세요.
취업 코칭 전문가들이 여러분의 고민을 해결해 드립니다.
 
다음 링크에 이메일을 입력하시면 메일로 1:1 커리어 상담권과 취준 자료집을 보내드릴게요.
 
Share article
Subscribe to our newsletter

내일배움캠프 블로그