안드로이드의 큰 특징이자, 안드로이드 아키텍처 이해에 있어서 중요한 컴포넌트(component)에 대해서 살펴보도록 하겠습니다.
1. 컴포넌트는 앱의 구성단위이다
컴포넌트는 안드로이드 앱을 구성하는 구성 단위입니다. 안드로이드 앱은, 여러 개의 컴포넌트를 개발자가 작성하고 이를 조합하여 완성하게 되는 개념입니다. 그런데 '컴포넌트'라는 개념 자체가 가시적인 개념이 아니어서 이해가 안 될 수도 있습니다.
2. 컴포넌트의 물리적 단위는 클래스이다
눈치채신 분들도 있겠지만, (광의의 의미에서)컴포넌트는 클래스라는 물리적인 단위로 구분됩니다. 예를 들어, 어떤 하나의 앱이 A.class, B.class, C.class라는 세 개의 클래스로 구성되어 있다면 이 앱은 3개의 컴포넌트 클래스로 구성되어 있다고 말할 수 있습니다.
하지만 여기서 중요한 개념을 짚고 넘어가야 합니다. 앱에서 만든 모든 클래스는 컴포넌트일까요? 결론만 얘기하자면, 답은 "NO"입니다. 그런데 이 사실이 그렇게 중요한 걸까요? 네, 중요합니다. 클래스와 컴포넌트의 관계를 이해한다는 것이야 말로 실제로 개발을 진행할 때 영향을 미치는 안드로이드 아키텍처의 근본이기 때문입니다. 일례로, 이 관계를 이해해야 인텐트(Intent)의 개념도 이해할 수 있기 때문입니다.
▷ 컴포넌트 VS 일반 클래스의 생명주기 관리
기본적인 구분부터 하나씩 살펴보겠습니다. 우선 일반 클래스의 생명주기는 개발자의 코드로 관리합니다. 이를테면 new를 이용해서 인스턴스를 생성해 이용하고, 필요가 없다면 null을 대입해서 소멸할 수도 있습니다.
하지만, 안드로이드 컴포넌트의 생명주기는 똑같은 클래스라고 하더라도 코드레벨이 아닌 안드로이드 시스템 레벨에서 관리하게 됩니다.
▷ 컴포넌트 VS 일반 클래스의 실행 독립성
'생명 주기가 어쨌든 간에, 결국은 둘 다 [클래스] 아닌가? 다른 점이 있나?'라는 생각이 들 수 있습니다. 이제 여기서부터 근본적인 차이가 발생하기 시작합니다. 결론만 얘기하면, 컴포넌트는 독립적으로 동작하고 클래스는 결합하여 동작합니다.
일단 일반 클래스는 "직접 결합"되어 실행할 수 있다는 특징을 갖습니다. A 클래스와 B 클래스 두 개가 있을 때 A 클래스 안에서 B 클래스를 실행하려면 어떻게 할까요? A 클래스 안에서 아래와 같이 인스턴스를 생성하게 됩니다.
B b1 = new B();
이런 경우를 "A 클래스가 B 클래스에 직접 결합 되었다." 라고 표현하게 됩니다.
하지만, 여기서 A와 B 클래스가 안드로이드 컴포넌트 클래스라면 이처럼 직접 코드를 이용해 실행할 수 없습니다. 그럼, 어떻게 실행하게 되는 것일까요? 역시 결론만 얘기하자면, 개발자 코드를 이용해 명령을 내리고 실행하는 것이 아니라 시스템이 대신 간접적으로 실행하게 됩니다. 여기서 등장하는 개념이 바로 '인텐트(Intent)'입니다.
위의 그림과 같이, 컴포넌트 A는 컴포넌트 B를 실행하기 위해서 시스템에 실행을 의뢰합니다. 여기서 실행은 인텐트를 매개체로 하여 진행됩니다. 그렇기에 A와 B는 직접적으로 결합되지 않고 독립적으로 실행되는 것입니다.
인텐트에 대해서는 추후 자세히 살펴볼 것입니다. 그리고 이러한 '컴포넌트 기반의' 구조는 안드로이드의 몇 가지 특성을 갖게 만드는 주요한 요인입니다. 이를 다음 아티클에서 더 살펴보겠습니다.
'Programming > Android' 카테고리의 다른 글
2. 안드로이드 기본 구조의 이해 (2) - 컴포넌트(component) 3 (1) | 2023.11.28 |
---|---|
2. 안드로이드 기본 구조의 이해 (2) - 컴포넌트(component) 2 (0) | 2023.11.27 |
2. 안드로이드 기본 구조의 이해 (1) - 안드로이드 아키텍쳐 (0) | 2023.11.12 |
1. 안드로이드 스튜디오 기본 환경 구축 (3) - 앱 배포 (0) | 2023.10.17 |
1. 안드로이드 스튜디오 기본 환경 구축 (2) (0) | 2023.10.05 |