기록물 저장소/활동

[SW 마에스트로] 면접 대비 Android Studio의 이론과 예상 질문

모영이 2021. 3. 24. 13:20

아래의 사이트의 정리된 내용을 정리했습니다. 후에 정보가 추가되면 출처를 밝히도록 노력하겠습니다. 누락된 출처가 있고 정보가 섞여서 정리 될 수 있습니다. Android의 이론은 예전에 개발을 했을 때 조금씩 공부했어서 뭐가 뭔지는 느낌만 들지만 제대로 아는 것은 하나도 없다. 이렇게 말할 수 있습니다.

 

Android 전체 내용1

Android 계층구조 추가설명1

 

 

 

Android

4대 컴포넌트

Activity(액티비티)

UI 화면을 담당하는 컴포넌트. 자바소스에서 Activity클래스를 상속해야한다. 기본적으로 가지고 있는 생명주기 메소드를 재정의하여 원하는 기능을 구현하는 방식으로 제작.

 

Activity Life Cycle(액티비티 생명 주기)

1) 재개(create, start, resume)

2) 일시정지(pauser)

3) 멈춤(stop, destroy)

 

상태에 따른 콜백 메서드 순서

onCreate(액티비티 생성 직전)

onRestart(액티비티가 stop상태에서 재시작 될 경우)

onStart(액티비티가 화면에 보여지기 직전)

onResumed(액티비티가 사용자와 상호작용하기 직전)

onPause(액티비티가 부분적으로 가려짐)

onStopped(액티비티가 더이상 보이지 않을 때)

onDestroy(액티비티가 소멸되기 직전)

 

Service(서비스)

백그라운드에서 오래 실행되는 작업을 할 때 사용되는 구성요소이다. 서비스는 스레드가 아니라 단순히 백그라운드에서 실행될 수 있는 컴포넌트. 기본적으로 메인 스레드에서 실행. 서비스가 집약적이거나, 메인 스레드와 별도로 작업을 수행해야 한다면, 서비스 안에서 새로운 스레드를 만들어서 작업해야 한다.


Foreground Service :
유저에게 알림을 줄 수 있는 명령을 수행.
Background Service :
유저에게 직접적으로 알림을 주지 않는 명령 수행.
Bound Service : bindService()
메소드를 호출해서, 어플리케이션 컴포넌트에 바인딩 되는 서비스.

 

BroadcastReceiver(방송 수신자)

안드로이드 구성요소 중 하나로 원하는 메시지를 보내거나 받을 수 있는 컴포넌트. 충전기를 꼽았다던지, SMS문자메시지, 전화, 하는 일에 대한 메시지를 받을 수 있다.

 

ContentProvider(콘텐츠 제공자)

앱간의 데이터 교환을 위해 다른 앱에게 데이터를 제공하고 데이터를 가져올 수 있게 하는 구성요소. 데이터를 관리하고 다른 어플리케이션 데이터를 제공해주는 컴포넌트.

안드로이드의 메모리 구조

렘 : 프로그램이 실행될 때 상주되는 공간. 평상시에 하드에 저장되어 있다가 런타임시에 차지되는 공간.

내장 메모리 : 간단하게 하드디스크라고 생각해도 된다.

외장 메모리 : 메모리가 더 필요할 때 추가할 수 있는 메모리.

Android의 계층 구조

System App : OS에 내장되어 있는 기본 어플리케이션

JAVA API Framwork : 구글에서 제공하는 개발자용 라이브러리

Native C/C++ Libraries : 안드로이드 OS가 C언어 코드를 동작시키기 위한 영역

Android Runtime(ART) : 앱 설치시 Java코드를 네이티브 코드로 변환하여 설치(속도향상)

HAL : 리눅스 커널과 단말기 하드웨어의 통신을 담당

Linux Kernel : 안드로이드의 기본 OS인 리눅스 커널

Thread, Handler, Looper

Thread : 안드로이드는 기본적으로 하나의 메인 쓰레드로 작동.
Handler : 
생성시 핸들러를 생성한 스레드와 루퍼에 연결. 스케줄링 가능. 메시지를 처리.
Looper : 
메시지 큐에서 반복적으로 처리할 메시지를 Handler에 전달.
Handler
 Looper Thread 백그라운드 처리에 사용.
HandlerThread : 
내부에 루퍼를 가지고 있는 스레드.

JSON과 XML

JSON, XML의 공통점
데이터를 저장하고 전달하기 위해 고안.
기계뿐만 아니라 사람도 쉽게 읽을 수 있다.
계층적인 데이터 구조
다양한 프로그래밍 언어에 의해 파싱
XMLHttpRequest
객체를 이용하여 서버로부터 데이터를 전송받을 수 있다.
JSON, XML
의 차이점
JSON
은 종료 태그 X
JSON 
구문이 XML구문보다 짧다.
JSON 
데이터가 XML 데이터보다 더 빨리 읽고 쓸 수 있다.
XML
은 배열 사용 X, JSON 배열 사용 O
XML
 XML 파서로 파싱, JSON JS표준 함수인 eval()함수로 파싱.
XML
문서는 XML DOM을 이용하여 해당 문서에 접근.
JSON
은 문자열을 전송받은 후에 해당 문자열 바로 파싱. 더 빠름.
JSON
은 전송받은 데이터의 무결성을 사용자가 직접 검증.
XML 
스키마를 사용하여 데이터의 무결성을 검증.

그 외 짤막한 것들

CustomView

기존에 있는 View로 표현할 수 없는 모양의 View를 구현할 때 필요. View를 상속받는 자손 클래스를 만들어서 구현.

1) 기존 View상속

2) onDraw(), onMeasuer(), onKeyDown()과 같이 시작하는 키워드가 on인 수퍼클래스 메서드를 오버라이드.

 

Fragment

액티비티의 부분부분을 동적으로 동작시키기 위해 생긴 개념. 앱 하나를 서랍이라 하고, 액티비티를 서랍의 한칸이라고 하면, 프래그먼트는 서랍안의 부분부분을 나눠서 정리하는 정리함의 한칸.

 

Intent

인텐트는 구성요소를 실행시키고 구성 요소 간 데이터를 전달하는데 사용. putExtra()를 통해 담을 수 있고, 전달 받은 데이터를 getExtra()를 통해 받을 수 있다.


PendingIntent

보류된 인텐트. 특정시점에 자신이 아닌 컴포넌트가 다른 컴포넌트에게 펜딩 인텐트를 사용하여 작업을 요청. 사용자가 Notification을 클릭했을 때 특정한 작업을 수행. 미래의 특정 시점에 실행되는 인텐트를 선언하는 경우에 펜딩 인텐트를 사용.

 

AsyncTask

백그라운드에서 작업을 수행한 뒤 그 결과를 UI Thread에서 갱신할 때 주로 사용된다.

 

Manifest file

애플리케이션에 관한 정보를 입력하는 파일로, XML형태로 저장된다. 전반적인 앱에 대한 정보를 저장한다.

 

LMK(Low Memory Kiler)

가용 메모리를 확보하기 위해 프로세스들을 죽이는 동작.

 

FCM

서버 기능을 수행하면서, 복잡한 알림 기능까지 포함한다면 서버 속도는 처리량이 많아 느려질 것이다. 해결책으로 알림의 기능은 다른 서버가 제공해주고 본 서버는 알림기능을 제공하는 서버에 알림이 있는지 요청을 해서 정보를 가져오는 구조. 서버와 클라이언트 앱이 필요. 

 

DVM

안드로이드는 JVM이 아닌 DVM혹은 ART에서 실행된다. DVM은 구글에서 개발한 가상머신인데, JIT 컴파일러를 사용하여 실행속도를 향상 시킨다. 컴퓨터보다 메모리 공간이 적다는 필요성.

 

Kotlin

자바에 비해 훨씬 간결해진 코드

객체지향이면서 함수형 프로그래밍 언어

자바와 상호 운용 가능

 

Callback

특정 이벤트 발생시 자동으로 실행되는 함수.

 

Listener

원래 개념은 n개의 이벤트를 처리할 수 있다는 점과 Callback은 동기로, Listener은 비동기로 처리된다는 점. 안드로이드에서는 거의 차이가 없다.

구체적인 질문 LIST

화면 회전시 동작

현재 만들어진 액티비티 인스턴스는 파괴되고 새로운 Orientation을 가진 액티비티 인스턴트가 만들어진다. 메모리에서 해제된다. 데이터 백업 필요.