Android Interview / CS 정리
2022. 5. 17. 17:07ㆍAndroid/깨알 개념 정리
Android 4대 컴포넌트
- Activity : UI 담당 컴포넌트
- Service : 백그라운드 실행 컴포넌트
- BroadCastReceiver : 단말에서 발생하는 다양한 이벤트를 받아 반응하는 컴포넌트
- ContentProvider : 데이터 공유 컴포넌트
What is the Intent?
- 컴포넌트 간 정보를 주고받을 수 있음
- 명시적 Intent : Intent에 클래스나 컴포넌트 이름을 명시, 호출할 대상을 명확히 알 수 있는 것
- 암시적 Intent : 호출할 대상이 바뀔 수 있는 경우
ANR(application not responding)
- android 앱의 UI 스레드가 너무 오랫동안 차단될 경우 발생
Context
- Context : 현재 사용되고 있는 application의 포괄적인 정보를 지닌 객체
- ApplicationContext : application의 lifecycle을 가지며 application의 실행 ~ 종료까지 동일한 정보를 가짐
- ActivityContext : activity의 lifecycle을 가지며 onDestory 될 때 사라짐
Service & Thread
- Thread : 작업을 동시에 실행할 수 있는 클래스, 일반적으로 긴 작업을 수행하는 데 사용
- Service : 서비스는 백그라운드에서 실행시간이 긴 작업을 수행, 사용자 인터페이스를 제공하지 않는 어플리케이션 구성요소
Thread Safe
- 다중 스레드 프로그래밍에서 여러 스레드로부터 동시 접근이 일어나도 프로그램 실행에 문제가 없는 것 (read only, val, data class copy())
Jetpack: 안드로이드 앱을 구축하는데 도움이 되는 라이브러리 모음
Handler
- Android에서 UI 작업은 별도의 스레드가 아닌 메인 스레드에서 작업해야 한다. 로직상, 다른 스레드에서 UI 처리를 해야 한다면 해당 스레드와 메인 스레드를 연결해주는 Handler를 사용해야 한다.
Gradle
- 유연성과 성능에 중점을 둔 오픈소스 빌드 자동화 도구이다.
- 간단히 말해서 애플리케이션 빌드를 생성하는 자동화 도구이다
Retrofit
- Retrofit은 REST API 통신을 위해 구현된 라이브러리
- 백그라운드에서 실행되며 callback을 통해 메인 스레드에서의 UI 업데이트를 간단하게 할 수 있도록 제공
MutableLiveData: read, write
LiveData: only read
gradle에서 api와 implementation의 차이점
- api: 의존 라이브러리 수정 시 해당 모듈을 의존하고 있는 모듈들 또한 재 빌드
- implementaion: 의존 라이브러리 수정 시 본 모듈까지만 재 빌드
Aac viewModel, mvvm ViewModel
- aac ViewModel : Android의 수명 주기를 고려하여 UI 관련 데이터를 저장하고 관리하도록 설계(1:1)
- mvvm ViewModel : View에 필요한 데이터를 관리하여 바인딩해주고,비즈니스 로직을 담당해 데이터를 처리하는 요소 (n:1)
presentation logic, business logic
- presentation logic: GUI 화면 구성 로직
- business logic: 데이터를 보여주기 위해 DB 검색, GUI에서 새롭게 발행된 데이터를 DB 저장등 실제 작업 코드
Launch mode
- standard: 기존에 생성된 Task에 액티비티를 계속 쌓고 버튼을 연속 두 번 누를 경우 같은 액티비티가 2개 이상 쌓일 수 있다. ( A > B > A > A )
- singleTop: 설정된 액티비티가 같은 Task 제일 상단에 존재할 경우 새로운 액티비티를 생성하지 않고 기존에 생성된 액티비티를 재 사용하며 onNewIntent 메서드를 호출
ex) push, 공유하기 등을 통해 외부에서 접근 가능한 activity
- singleTask: 해당 속성을 가진 A 액티비티는 동일 task상에서 하나만 존재한다. 동일 task에 존재할 경우 onNewIntent 메서드를 호출하는 게 singleTop과 유사하지만 다른 점은 제일 상단에 있지 않아도 재사용되며 사이에 있는 액티비티들은 모두 clear 시킨다
ex) 잠금화면
- singleInstance: 해당 속성으로 실행된 액티비티는 단일 task에 존재하고 해당 테스트에 최상단으로 존재합니다. 액티비티를 호출할 때 생성되어 있는 액티비티가 있다면 재활용해서 사용
px, dp, sp
- px: 스크린 실제 단위
- dp: px 독립 단위, 화면 크기가 달라져도 동일한 비율
- sp: 텍스트 크기 지정, 시스템 설정에 영향 받음
Activity, Fragment의 차이점
- Activity : 독립적, stack에에 쌓임, 전체 화면에 구성됨
- Fragment : Activity에 종속적, 트랜잭션에 쌓임, 다양하게 ui 구성 가능
onSaveInstanceState, onRestoreInstanceState
- 화면의 상태 저장 및 복원 방법
- onSaveInstanceState()는 onDestroy() 메소드가 호출되기 전에 호출, onRestoreInstanceState()는 onCreate() 메소드가 호출된 직후에 호출
- 사용 방법
CS
Annotation
- 특정 클래스, 변수, 메소드 등에 붙이는 코드로 해당 티켓의 기능을 좀 더 명확하게 해주는 역할
LayoutInflater
- xml 에 정의된 resource 들을 view 희 형태로 변환
onStop에서 DB 업데이트를 모두 저장할 수 있는지?
- 아니요, 몇몇 경우엔 onStop이 호출되지 않을 수 있습니다. 메모리 부족이나 configuration changes인 경우, onStop에 도달하기 전에 android가 강제로 어플리케이션을 종료할 수 있습니다.(사용자가 back버튼을 누를 경우, onSaveInstanceState가 호출되지 않기 때문에 모든 DB 테이블을 onSaveInstanceState에 저장할 수 없다)
View & ViewGroup
- view : 화면 어디에 배치되어야 하는지에 대한 정보가 없음 즉, view 만으로 화면을 나타낼 수 없음
- viewGroup : view를 담을 수 있는 container
DataBinding
- ui 요소와 데이터를 프로그램적 방식으로 연결하지 않고 선언적 형식으로 결합할 수 있게 도와주는 라이브러리
액티비티가 파괴될 때, 메모리에 남아 있나요?
- 일반적으로 onDestroy가 호출되면 app은 메모리에서부터 없어진다. 만약 유저가 빈번하게 앱을 방문한다면 다시 메모리에 로드해야 하는데 이를 방지하기 위해 안드로이드는 onDestroy 이후에도 메모리를 유지할 수 있다. 이를 empty process 라고 한다. (최대 30분까지 남아있음)
Intent & Bundle
- Intent: 저장이 아닌 전달하는 수단으로의 객체
- Bundle: 상태/값 등을 저장하기 위한 객체
- 번들의 보관은 shut down후 다시 초기화할 때 보관할 수 있다. 예를 들어 메모리 부족으로 shut down되는 경우 / 디바이스를 가로, 세로모드로 바꿀 때shut down되는 경우 create에서 bundle saveinstancestate를 보면 처음 oncreate일때 bundle값인 saveinstancestate는 null값이 되고 저장했을 때 저장 값을 그리고 된다.
What is the Android Manifest?
- 프로그램에서 필수적이며 루트 디렉터리에 선언되며 코드를 실행하기 전에 Android 시스템이 알아야 하는 애플리케이션에 대한 정보를 포함하는 곳이다.
저장 방식의 차이
- Application : 라이프사이클을 알고 있고, 어플리케이션에서 관리하는 메모리는 힙 영역에 선언
- Sharedpreferences : 값 저장을 xml 형태로 로컬에 저장하는 데에 의미를 둠
- Singleton : 스태틱 영역에서 메모리 관리
Gson Java Object를 Json 문자열로 변환할 수 있고, Json 문자열을 Java Object로 변환
Vector & Bitmap
- Vector: 리사이징 되어도 전혀 깨지지 않음. 모든 해상도에서 자유자재로 활용할 수 있기 때문에 특정 해상도에 제한되어 있지 않다는 것이 핵심이다. (Ex- SVG)
- Bitmap: 픽셀로 구성되어 있으며 자유자재로 바꿀 수 없고 움직일 수도 없다.(Ex- PNG, JPEG)
Singleton
- 싱글톤 패턴은 특정 클래스에 대한 인스턴스를 단 한번만 static 메모리 영역에 할당하고 해당 클래스에 대한 생성자를 여러 번 호출하더라도 최초에 생성된 객체를 반환하는 디자인 패턴
DI (Dependency Injection)
- 의존성 주입 : 필요한 객체를 직접 생성하지 않고 외부에서 생성 후 주입해서 사용하는 방식
- 객체 간의 결합도를 줄이고 코드의 재활용성을 높여준다
Library, Framework
- library 도구모음
- framework 일정한 틀, 부품을 가지고 결과물을 만듦
JVM
- java Virtual Machine의 약자로 자바 바이트 코드를 실행할 수 있는 주체이다.
- 즉, OS 위에서 동작하는 프로세스로 자바 코드를 컴파일해서 얻은 바이트 코드를 해당 운영체제가 이해할 수 있는 기계어로 바꿔 실행시켜주는 역할을 한다.
REST & RESTful
- REST는 기본적으로 웹의 기존 기술과 HTTP Protocol을 그대로 활용하기 때문에 웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일
- REST는 Network상에서 Client와 Server 사이의 통신 방식 중 하나
- REST ful : REST 원리를 따르는 시스템은
동기 & 비동기
- 순차적으로 일 처리, 동시적으로 일 처리
Compile Time and Run Time
- CompileTime : 개발자가 작성한 언어를 컴퓨터가 인식할 수 있게 기계어 코드로 변환(즉, 컴파일러가 타입을 검증해줌)
- RunTime : 컴파일 과정을 마쳐서 사용자에 의해 실행되어 짐(컴파일 시 걸러내지 못하고 실행 시점에 오류가 발생)
UI/UNIT TEST
- Unit 테스트
- 일반적으로 코드의 유닛 단위(메소드, 클래스, 컴포넌트)의 기능을 실행하는 방식
- 관련 툴 : JUnit, Mockito, PowerMock JVM 위에서 실행 로컬 단위테스트 Mokito 클래스 mock viewmodel 의 데이터를 잘 불러오는지 when thenReturn
- test
- Ui 테스트
- 사용자 인터랙션(버튼 클릭, 텍스트 입력 등)을 평가
- 관련 툴 : Espresso, UIAutomator, Robotium, Appium, Calabash, Robolectric 사용자 단말이나 에뮬레이터에서 실행
- androidTest
추상 클래스: abstract, 변수 O, 메소드 O, 추상 메소드 O
인터페이스: 오직 추상 메소드로 구현, default 키워드로 일반 메소드도 구현 가능
함수형, 객체지향 프로그래밍
- 객체 지향 프로그래밍(OOP : Object-Oriented Programming)
- 컴퓨터 프로그래밍 중 하나로 프로그래밍에서 필요한 데이터를 객체화시켜 상태와 행위를 가질 객체를 만들고 그 객체 간의 유기적인 상호작용을 통해 조직을 구성하는 프로그래밍 방법
- 객체지향 프로그래밍의 경우, 클래스 디자인과 객체들의 관계를 중심으로 코드 작성이 이루어진다. 따러서 상태, 멤버변수, 메서드 등이 긴밀한 관계를 가지고 있다. 특히 멤버변수가 어떤 상태를 가지고 있는가에 따라 결과가 달라짐
- 코드 재사용성에 용이, 유지보수에 용이, 대형 프로젝트에 적합(모듈화 개발)
- 함수형 프로그래밍 (Functional Programming)
- 순수 함수를 작성하여 프로그램으로 가독성을 높이고 유지보수를 용이하게 하여 부작용을 줄이는 프로그래밍 기법
- 순수 함수 : 함수의 입력이 주어지면, 항상 일관된 출력이 나오며 프로그램 실행에 영향을 미치지 않는 함수
- 코드에서 프로그램의 실행에 영향을 미치는 영역과 순수한 영역을 최대한 분리함으로써, 코드 가독성 상승, 유지보수에 용이, side effect 없는 안전한 코드 구현 가능