앱의 필수 구성 요소이며, 여러 개가 모여 하나의 앱을 만든다.
자바의 클래스가 여러 개 모여 자바 파일이 되는 것과 마찬가지로, 안드로이드 앱 역시 여러 컴포넌트가 모여 완성되는 것이다. 컴포넌트의 물리적 모습은 클래스로, 클래스 하나가 컴포넌트라고 생각하면 된다.
🙋♂️ 그럼 클래스와 컴포넌트는 동일한건가요?
그렇지 않다. 안드로이드의 클래스는 컴포넌트와 일반 클래스로 나뉘어지는데, 이 둘의 차이점은 생명주기를 누가 관리하느냐에 있다.
컴포넌트는 앱 내에서 독립적인 실행단위이다.
생명주기를 시스템이 관리하더라도, 컴포넌트 역시 클래스이므로 다른 여러 클래스와 조합해야 하는데, 객체 지향 프로그래밍과는 조금 다르다.
결합도와 이어지는 이야기로, 기본적으로 객체 지향 프로그래밍에서 한 클래스에서 다른 클래스를 실행할 때 Hoya hoya = new Hoya()
와 같은 구문으로 객체를 생성 후 실행하는데, 이렇게 되면 결합도가 높아져 자유자재로 앱을 구현하기 힘들어진다.
이를 보완하기 위해 컴포넌트는 이런 구조로 구성되어 있다.
인텐트를 중간 매개체로 사용하여 서로 결합되지 않은, 즉 "느슨한 결합도" 상태로 한 컴포넌트가 다른 컴포넌트를 실행하는 것이다. 이 느슨한 결합도를 활용한 케이스는 무엇이 있을까?
우리가 늘 사용하는 카카오톡을 예로 들어서 설명해보자. 실생활에서 카카오톡을 접속하는 경우는 크게 두 가지가 있다.
기본적으로 1번처럼 유저가 안드로이드 앱의 아이콘을 눌러 앱을 실행시키는 경우가 있는가 하면, 2번과 같이 아이콘을 누르지 않아도 유저에게 알림을 주기 위해 앱이 실행되는 경우가 존재한다.
이처럼 앱의 실행 시점은 매우 다양한데, 컴포넌트가 독립적인 단위로 실행되기 때문에 이런 상황을 유연하게 대처할 수 있다.
앱 라이브러리 개념이 있다.
컴포넌트가 독립적인 실행 단위이기 때문에 얻을 수 있는 또 다른 장점이다. 코드 간 결합이 발생하지 않기에 외부 앱의 컴포넌트 역시 실행이 가능하다. 인스타그램을 예시로 들어보면, 프로필 사진을 업로드할 때 갤러리 앱을 실행하는 것을 볼 수 있다.
인스타그램에서 당연히 갤러리 앱을 만들진 않았을 것이다. 그러나, 위에서 이야기했듯이 컴포넌트 클래스는 독립적 실행 단위이기 때문에 인스타그램에서 갤러리를 구현한 것처럼 이용할 수 있다. 즉, 다른 앱을 라이브러리처럼 사용할 수 있다 해서 앱 라이브러리 개념이라고 불리게 된 것이다.
컴포넌트의 개념에 관해 살펴보았으니, 이제 어떤 종류의 컴포넌트가 있는지 알아보도록 하자.
사용자와 상호작용 하기 위해 진입점 역할을 수행한다.
◼ 안드로이드를 개발하며 죽어라 보는 컴포넌트이기에 자세한 설명은 생략한다.
사용자의 눈에 보이지 않는 백그라운드 영역의 작업을 처리한다.
◼ 우리가 흔히 사용하는 음악 스트리밍 앱을 생각하면 이해가 쉽다. 화면상에 앱이 나타나있지 않음에도 불구하고 음악이 재생되는 것은 서비스 컴포넌트의 역할이 있었기 때문이다.
데이터를 관리하고 앱 간의 데이터를 공유한다.
◼ 사용하는 앱에서 주소록 데이터가 필요하다면 주소록에 접근해 데이터를 가져오는 것이 대표적인 예시이다.
전화의 수신 혹은 발신, 배터리의 부족등 이벤트가 발생했을 때 반응한다.
◼ 대표적 예시로 카카오톡이 왔을 때 상단에 알림을 표시하는 것이 브로드캐스트 리시버의 역할 중 하나이다.
참고 및 출처
깡샘의 안드로이드 프로그래밍
안드로이드 (Android) 4대 컴포넌트(구성요소)
안드로이드 4대 컴포넌트 이해 [Youtube]