Android Interview / CS 정리

2022. 5. 17. 17:07Android/깨알 개념 정리

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 없는 안전한 코드 구현 가능