본문 바로가기
Android Q&A/Android One a day

[안드로이드 면접] - 13 :

by 후추부 2023. 2. 9.

1. Vector 와 Bitmap 차이는?

더보기

Vector (ai, eps, svg)

점과 점을 연결하여 수학적 원리로 그림을 그려 표현하는 방식

이미지를 리사이징(크기를 늘리고 줄여도) 하여도 손상이 되지 않는다.

하지만 사진과 같은 복잡한 그림을 표현하려면 컴퓨터에 부담을 줄 수 있다.

 

Bitmap (jpg, jpeg, png, gif)

서로 다른 많은 점(픽셀)들의 조합으로 그려지는 이미지 표현 방식

비트맵 이미지는 정교하고 화려한 표현이 가능(주로 사진 이미지에 사용)

하지만 리사이징(크기를 늘리고 줄이는) 하면 원본 이미지에 손상이 갈 수 있음.

 

2. View 와 ViewGroup 차이는? 

더보기

View

안드로이드 화면의 구성요소이다.

화면에 보이는 모든 것은 View 이다. View는 자신이 화면 어디에 배치되어야 하는지에 대한 정보가 없다.

View 만으로 화면에 나타날순 없다.

View 를 화면에 배치하기 위해선 ViewGroup 혹은 View Container 가 필요하다.

 

ViewGroup

N 개의 View 를 담을 수 있는 Container 이다. ViewGroup 또한 View 를 상속받아 만든 클래스, 또는 Layout 이라고 일컫는다.

ViewGroup 내에선 View 들만 배치가 가능하고, ViewGroup 조차 View 로 다룰 수 있다. 그래서 부모 ViewGroup 에 자식 ViewGroup 을 갖을 수있다.

 

 

3. 안드로이드 컴포넌트란?

더보기

컴포넌트는 구성요소라는 뜻을 가지고 있다.

안드로이드는 4대 컴포넌트가 존재하는데, 앱을 구성하는데 필요한 4가지 요소를 의미한다.

각 컴포넌트는 독립적인 형태로 존재하며, 인텐트(Intent) 를 통해 상호작용한다.

 

4. 안드로이드 4대 컴포넌트는?

더보기

4대 컴포넌트는 Activity, Service, Broadcast Receiver, Content Provider 이다.

 

Activitiy

UI 화면을 담당하는 컴포넌트이다.

 

Service

화면에 존재하지 않고, 백그라운드에서 실행되는 컴포넌트이다.

크게 세 가지로 나뉜다.

포그라운드 서비스, 백그라운드 서비스, 바운드 서비스

 

포그라운드 서비스

- 알림을 표시해 놓고 사용자와 상호 작용하지 않아도 계속 실행되는 걸 말함.

 

백그라운드 서비스

- 사용자가 직접 알지 못하는 작업을 수행할 때 사용

 

바운드 서비스

- 앱 내에서 서비스를 사용하여 간단하게 클라이언트 - 서버 환경을 구성하는 것을 말함(특정 컴포넌트와 서비스간 상호작용)

 

Broadcast Receiver

단말기에서 발생하는 다양한 이벤트, 정보를 받고 반응하는 컴포넌트이다.

ex) 화면이 on/off 되었을 때, 재부팅 했을 때 등등

 

Content Provider

데이터를 저장하고, 가져오고, 모든 App 에서 접근할 수 있도록 하는 컴포넌트이다.

 

 

5. Intent 란?

더보기

어떤 메시지를 담고 있는 하나의 객체다.

이 메시지는 어떤 액티비티로 이동할지, 어떤 서비스를 시작할지 등 목적지 정보를 갖고 있거나 옮겨야 하는 데이터를 갖고 있을 수도 있겠다.

 

인텐트는 메시징 객체로 다른 앱 구성 요소로부터 작업을 요청하는 데 사용할 수 있다. 기본 사용례는 크게 3개로 나눌 수 있다.

1. 액티비티 시작 : 액티비티의 새 인스턴스를 시작하려면 인텐트를 startActivity()로 전달하면 된다. 인텐트는 시작할 액티비티를 설명하고 모든 필수 데이터를 담는다.

2. 서비스 시작 : 서비스를 시작해 1회성 작업(파일 다운로드 등)을 수행하게 하려면 인텐트를 startService()에 전달하면 된다. 인텐트는 시작할 서비스를 설명하고 모든 필수 데이터를 담고 있다.

서비스가 클라이언트-서버 인터페이스로 디자인된 경우 다른 구성요소로부터 서비스에 바인딩하려면 인텐트를 bindService()에 전달하면 된다.


3. 브로드캐스트 전달 : 브로드캐스트는 모든 앱이 수신할 수 있는 메시지다. 시스템은 시스템이 부팅될 때 또는 기기가 충전을 시작할 때 등 시스템 이벤트에 대한 다양한 브로드캐스트를 전달한다. 인텐트를 sendBroadcast() 또는 sendOrderedBroadcast()에 전달하면 다른 앱에 브로드캐스트를 전달할 수 있다.

 

인텐트의 유형은 안드로이드 doc에서 말하는 대로 2가지가 있다.

 

명시적 인텐트

아예 대상 이름을 콕 찝어서 그 대상에게 어떤 작업을 하라고 명령할 때 사용하는 것이다. 때문에 코드에서 액티비티, 프래그먼트, 서비스 등 컴포넌트를 실행할 때 사용한다.

 

암시적 인텐트

대상 이름을 콕 찝어 말하진 않지만, 비슷한 기능을 수행하는 앱들을 불러모아서 사용자한테 이 중에 선택해서 쓰라고 할 때 사용하는 인텐트다.

 

예시 )

대표적인 예시가 PDF를 열거나 파일 공유 시, 음악/영상 재생 시, 카메라 앱을 실행시키는 버튼을 눌렀을 때 하단에서 올라오는 앱들의 목록을 담은 Bottom Sheet다. 설치된 관련 앱들이 있어도 사용자의 핸드폰에 그 앱이 깔려있지 않을 수 있으니, 일단 같은 기능 하는 앱들을 전부 불러다가 모아서 보여주는 것이다. 사용자는 그 중에서 원하는 앱을 실행하면 된다.

Bottom Sheet가 암시적 인텐트가 아니라, Bottom Sheet에 유저가 원하는 기능을 수행하는 앱들을 담아서 보여주도록 하는 요소가 암시적 인텐트라는 것이다.

 

또한 암시적 인텐트를 써서 사용자가 앱을 선택하게 하는 순간에 엉뚱한 앱이 나오지 않게 처리해야 할 것이다. 사진 기능을 원하는데 게임 앱이 올라온다면 이건 뭐지 싶을 거다.

이 때 인텐트를 가려서 앱들을 실행시키기 위해 인텐트 필터를 사용한다.