본문 바로가기

모바일(Mobile)/안드로이드(Android)

[Android] 안드로이드와 컴포넌트 (안드로이드를 구성하는 원소들)

안드로이드와 컴포넌트

안드로이드 앱 개발의 핵심은 컴포넌트입니다. 안드로이드에서 동작하는 프로그램을 보통 APP 또는 어플리케이션이라고 칭합니다.
이러한 안드로이드 앱은 컴포넌트로 구성되어 있는데, 안드로이드 앱은 다음의 4가지 컴포넌트로 구성되어 있습니다.

1. 액티비티(Activity)

  • 안드로이드의 화면 표시(뷰 바인딩 등)를 전적으로 담당하는 컴포넌트입니다.
  • 앱 화면을 리소스 파일과 바인딩하여 사용자에게 상호작용 가능한 인터페이스를 구성하는 역할을 합니다. 액티비티 컴포넌트는 안드로이드 시스템에서 자동으로 생명주기를 관리해 줍니다.
  • 따라서 개발자는 별도로 생명주기를 관리하지 않아도 안드로이드 시스템에서 기본적으로 생명주기를 관리해줍니다.

2. 서비스(Service)

  • 화면이 없는 것이 가장 큰 특징인 안드로이드 컴포넌트입니다.
  • 안드로이드에서 앱이 구동중이 아니더라도 백그라운드에서 특정 작업을 수행하고자 할 때 사용할 수 있습니다.
  • 서비스는 서비스의 라이프 사이클을 가지며 액티비티처럼 서비스만의 라이프 사이클을 가집니다.
  • 네트워크 통신과 같이 시간이 오래 소요되는 작업은 서비스 컴포넌트에서 관리하는 것이 바람직합니다.
  • 서비스 컴포넌트의 생명주기는 대부분의 경우 안드로이드 시스템에서 생성(Create)과 파괴(Destroy)를 관리해줍니다.

3. 브로드캐스트 리시버(BroadCast Receiver)

  • 안드로이드 OS를 탑재한 모바일 디바이스에서 일어나는 여러가지 하드웨어 이벤트들을 감지할 수 있는 컴포넌트입니다.
  • 브로드캐스트 리시버에서 감지하는 이벤트들은 안드로이드 앱 내의 액티비티에서 사용자와 상호작용을 통해 발생하는 이벤트와는 구분되는 개념이며, 주로 전원꺼짐 화면 켜짐과 같이 모바일 디바이스의 하드웨어에서 감지하는 이벤트에 대해서 감지하고 대응할 수 있도록 해줍니다.

4. 콘텐츠 프로바이더(Content Provider)

  • 안드로이드 OS의 파일 시스템 관리자 격의 역할을 수행하는 컴포넌트 입니다.
  • 데이터베이스, 파일 또는 네트워크 등의 다양한 데이터를 관리하고 다른 앱과 데이터 공유를 가능하게 합니다.
  • 데이터의 CRUD(Create, Read, Update, Delete) 작업을 제공하고, 안드로이드 시스템 및 다른 앱에서 데이터에 접근할 수 있도록 합니다.

안드로이드에서는 모든 자바 클래스가 컴포넌트인 것은 아닙니다. 안드로이드에서 말하는 컴포넌트들은 위에 설명한 네 가지 컴포넌트 클래스를 상속받는 자바 클래스를 가르키는 말입니다. 또한, 안드로이드 앱은 컴포넌트 뿐만 아니라 일반 클래스도 사용되며 앱마다 필요한 기능을 구현하고 서비스하기 위해 개발자가 직접 만들거나 도입하여 사용하기도 합니다.

안드로이드와 리소스(Resource) 관리

안드로이드 앱 내에서 사용되는 정적 자원들은 리소스를 기반으로 개발합니다. 여기서 리소스란 앱의 레이아웃, 색상 값 등 앱 실행중에 변하지 않는 값들을 의미합니다. 안드이드에서는 이러한 값들을 .xml 파일로 관리합니다.

 

 안드로이드 앱에서 정적인 값들을 담은 xml은 앱 내에서 런타임 시 파싱하여 사용하게 됩니다. 그런데, 이러한 자원들은 .java나 .kt와 같은 자바나 코틀린 클래스로도 관리할 수도 있습니다. 그러나 보통 안드로이드 개발을 하는 데에는 보통 XML로 값을 관리하는 편이며, 안드로이드 스튜디오에서도 이러한 방식을 권장합니다.

 

 만약 리소스를 클래스 파일로 관리하게 되면, 컴파일 시간에 값이 결정되므로, 실행 시간에 추가적인 리소스를 사용하지 않습니다. 반면에, XML 파일은 런타임에 파싱되어야 하므로, 실행 시간에 약간의 오버헤드가 발생 할 수 있습니다.

 

 하지만, 이러한 성능 차이는 무시할 정도로 작아서 실제로는 거의 영향을 미치지 않습니다. 따라서, 안드로이드에서 색상 값과 같은 리소스를 관리하는 것은 개발자의 개발 스타일과 개발 환경에 따라 선택할 수 있는 부분이긴 합니다.

 

 그럼에도 일반적으로는 회사에서는 UX/UI 디자이너와 같이 개발자가 아닌 동료와도 협업하고 소통하기 위해서라도 클래스 파일로 작성하는 것보다 xml 파일로 작성해서 관리하는 것이 더 효율적인 편입니다.

 

 그리고 개발하다 보면 고객의 요청에 따라 수정사항이 발생해도 파일 한 두개의 값만 바꾸어주면 다른 앱들을 수정하지 않아도 관리할 수 있다는 장점이 있어서 안드로이드에서 리소스의 관리는 XML 파일로 별도로 관리하는 것이 권장됩니다.