모의 기술 면접
코틀린 & 안드로이드 예상 질문
[초급]
Activity가 담당하는 역할이 무엇인지 설명해 주시기 바랍니다
- 단말기 화면(UI)을 전적으로 구성합니다.
- 사용자와의 상호 작용(inter action)을 담당합니다.
- 부착된 프래그먼트를 관리 등등
Activity 생명주기(Life Cycle)에 대해 설명해 보세요.(각 콜백함수가 담당하는 주 역할에 대해 정리하기)
- 콜백함수는 onCreate, onStart, onResume, onPause, onStop, onDestroy로 구성되어있습니다.
- onCreate는 Activity가 동작하기 위해 반드시 구현되어야 하는 콜백함수입니다. savedInstanceState에 화면 정보를 저장하여 나중에 activity가 화면에 다시 보일 때 savedInstanceState에 저장된 화면 정보를 불러올 수 있습니다. 초기화 처리를 위한 코드, 뷰 생성을 위한 코드(뷰바인딩 등)를 onCreate에서 작성합니다. 액티비티가 실행될 때 단 한번만 실행됩니다.
- onStart는 Activity가 사용자에게 보여지기 전에 호출되는 콜백함수입니다. 네트워크 연결이나 무거운 자원들을 로딩할 때 onStart에서 처리할 수 있습니다.
- onResume은 Activity가 사용자와 상호작용이 가능한 상태 바로 직전에 호출되며 Activity가 Stack의 맨 앞에 놓이게 됩니다.
오디오, 애니메이션, 영상과 같이 자원유지에 비용이 많이 들어가는 작업을 시작할 때 onResume에서 수행합니다.
onResume이후 Activity가 화면에 보이지 않는 상태가 되면 onPause가 실행됩니다.
- onPause는 Activity가 포커스를 잃고 다른 Activity가 호출될 때 호출됩니다.
onResume에서 시작한 자원이 많이 들어가는 작업을 중단시킬 때 onPause에서 수행합니다.
onPause가 수행될 때 Activity가 재실행되지 않을 가능성이 있으므로 중요한 자료를 저장하는 작업을 수행하거나 필요하지 않는 자원을 해제하기에 적합합니다.
onPause가 리턴되기 전까지는 다음 Activity가 실행되지 않기 때문에 onPause내에서 수행되는 작업은 빨리 끝나는 작업이어야 합니다.
onPause는 항상 안드로이드에 의해 호출이 보장됩니다.
onPause상태에서 onResume 또는 onStop이 호출될 수 있습니다.
- onStop은 Activity가 사용자에게 전혀 보이지 않게 될 때 호출됩니다.
안드로이드 시스템의 자원이 부족할 경우 onStop이 호출되지 않고 강제종료 될 수 있습니다.
Activity가 다시 화면에 보이게 될경우에는 onRestart가 호출되고 그대로 종료된다면 onDestroy가 호출됩니다.
- onDestroy는 Activity가 종료될때 호출되는 콜백 함수입니다. finish()메서드를 호출하여 Activity를 종료할때도 onDestroy가 호출됩니다.
isFinishing() 메서드를 사용해 정상종료인지 비정상종료인지를 확인할 수 있습니다.
onStop과 마찬가지로 항상 호출을 보장하지는 않습니다.
Activity가 onStop 일 때 Activity는 어떤 상황인가?
- Actiity 스택에서 백그라운드 상태가 됩니다(객체는 살아있는 상태)
- 다시 화면에 보인다면 해당 액티비티의 콜백메소드 동작을 얘기해 보세요
onRestart, onStart, onResume 순서로 콜백메서드가 호출됩니다.
안드로이드 Intent 의 정의와 어떤 종류의 인텐트가 있는지 얘기해 주세요
- 안드로이드 Intent는 재사용가능한 컴포넌트로 구성되었으며 화면을 구성하는 Activity Action,
내 앱에서 단말기에서 발생하는 상황을 수신하는 BroadcastReceiver Intent,
장시간 실행가능한 Service Intent 로 구성 될 수 있습니다
Activity/Fragment onSaveInstanceState(Bundle) Callback 함수는 어떤 역할을 담당하죠?
- 현재 화면의 orientation 이 바뀌거나 화면이 안보이다고 다시 보일때 View State를 저장할 일이 있다면 Bundle에 넣어
onRestoreInstance~~에서 복원하여 현재 Visible 화면에 보이게 합니다
BroadcastReceiver와 Service(WorkManager)의 차이점에 대해 설명해 주시기 바랍니다
- BroadcastReceiver : 단말기에서 발생하는 이벤트를 내 앱에서 수신하는 주된 역할(네트워크 접속 유무,와이파이 연결 등등)
- Service : 장시간 화면에는 보이지 않지만 백그라운드로 실행되어야 하는 비지니스 로직(파일 업로드, 음악재생, 주기적 위치 추척)
Service & WorkManager 의 차이점 설명
- Service : 사용자에게 백그라운드의 상황을 전달할 때 유리,비동기 코드를 개발자가 직접 개발해야함
- WorkManager : doWork 에 코드를 전개하면 자동으로 코루틴 기반으로 동작, 각 백그라운드 태스크를 연결 할 수 있다(태스크 연쇄화)
백그라운드 조건을 설정가능(배터리량,Wifi 연결시만 동작하게 등)
앱에서 파일 업로드기능을 구현한다면 어떻게 구현하시겠어요?
(사용자가 업로드 진행 중에도 다른 화면은 이동 가능하고 홈키를 눌었을때도 업로드는 동작해야하는 조건)
- 저는 foreground Service를 사용하겠습니다
포그라운드 서비스는 백그라운드에서 일어나는 상황을 주기적으로 사용자에게 Broadcast를 통해 전달할 수 있기 때문입니다.
백그라운드 서비스가 아닌 포그라운드 서비스를 사용하는 이유는 백그라운드 서비스는 리소스 관리 명목하에 당할 수 있는 시스템 서비스 kill을 겪을 수 있는 반면 포그라운드 서비스는 이에 비해 시스템에 의한 강제종료를 방지할 수 있습니다.(일부 단말기에는 자체 시스템으로 서비스 kill을 한다고 함)
따라서 notification을 제공하여 사용자에게 포그라운드 서비스의 동작을 인지시킬 수 있도록 하고 리소스 사용을 정당화함으로서 시스템에 의한 강제종료를 예방할 것입니다.
Thread 와 Coroutine의 차이점에 대해 설명해 보세요
- Thread : 새로운 Thread 스택이 만들어져 메모리 소모가 많고 Thread Context Switching 시 자원낭비가 많다
- Coroutine : 하나의 쓰레드에 메모리 만큼 생산이 가능한 경량 쓰레드이며 객체화 되어 처리된다
Collection 중 List, Set(중복된 데이터의 정의) & Map의 차이점에 대해 설명하세요
- List : index 0, 중복된 객체를 허용한다.
- Set : index가 없다, 중복된 객체를 허용하지 않는다
- Map : key 중복된 객체를 허용하지 않는다, value는 중복된 객체를 허용한다.
객체지향에서 캡슐화에 대해 설명해 보세요
- 클래스를 설계할 때 메소드(함수)안에서 상태(속성)을 변경할 수 있도록 프로그래밍 하는 기법이며
함수형 프로그래밍과 다르게 side effect를 이용해 프로그래밍을 진행하는 기법이다
객체의 행동으로 인해 상태가 변경되는 것을 side effect라고 한다.
상태는 외부에 직접 노출되지 않으며 객체는 오직 행동만을 외부에 노출시킨다.
interface의 역할과 사용하는 이유에 대해 설명해 주세요
- 해당 소프트웨어개발의 표준명세서(약속)라고 할 수 있습니다
- 다형성의 기본이 됩니다
다형성 : 하나의 타입에 여러 객체를 대입할 수 있는 성질이며 코드상으로는 동일한 이름의 메서드를 다른 클래스에서 다른 내용을 동작하게 하는 것, 오버로딩, 오버라이딩, 인터페이스를 통해 다형성을 구현할 수 있다.
다형성을 구현하기 위해서는 여러 객체들의 공통특성으로 타입을 추상화하고 그것을 상속(구현)해야 한다.
- 인터페이스 사용하면 한 클래스에서 사용하는 객체를 변경할 때 타입 변경없이 객체 주입만으로 수정할 수 있게 해준다. 변경과 확장에 유연한 객체 지향 프로그래밍을 수행할 수 있다.
- 객체지향 개념의 SOLID 5원칙 중 (자신의)확장에는 열려있으나 (주변의)변경에는 닫혀있어야 한다는 "OCP" 개념과 , 구현체가 아닌 추상화에 의존해야 한다는 "DIP" 개념이 다형성을 기본개념으로 하고있습니다.
Class 와 Instance(객체)의 차이점은 무엇인가요?
- Class : instance 를 만들어 내는 틀
- instance : Class를 기반으로 만들어진 객체를 의미
안드로이에서 data class 주로 하는 역할은 무엇이지요!
- data class 는 속성값만을 가지는 클래스로써 toString(), equals() 가 자동으로 재정의 되어 있다
Fragment는 Activity에 종속되어 동작합니다. Fragment가 Activity에 속하는 처음상태에서 해야할 일이 있다면 어디 콜백 메소드에 구현하시겠어요?
- Fragment가 Activity에 연결될 때 onAttached()가 호출되므로 onAttached 메서드에 구현할 것입니다.
또한 Fragment가 화면에 표시되기 전에 UI관련 초기화를 수행해야 한다면 onCreateView() 또는 onViewCreated() 메서드에 구현할 것입니다.
특히 onViewCreated()메서드는 프래그먼트의 뷰가 모두 생성된 후에 호출되므로 뷰의 초기값이나 리사이클러뷰의 어댑터등을 셋팅하는 코드를 onViewCreated()에서 구현할 것입니다.
Fragment View 의 생명주기 콜백메소드 및 각 역할은 ?
-
onAttach : 프래그먼트가 fragmentmanager에 추가되고 액티비티와 연결 될 때
-
onCreate fragmentmanager에 프래그먼트가 add되었을때 호출된다
fragment객체만 생성된 시점이고 아직 fragment view는 생성되지 않았기 때문에 여기서 뷰와 관련된 초기화 작업을 하면 안된다.
=========================================================
-
onCreateView
프래그먼트 layout을 inflate하는 작업을 수행합니다.
-
onViewCreated
Fragment View의 Lifecycle이 INITIALIZED 상태로 업데이트 됩니다.
뷰 관련 초기화 작업을 수행합니다.
-
onStart
프래그먼트가 사용자에게 보여질 수 있을 때 호출됩니다.
fragmentTransaction 작업을 수행할 수 있습니다.
-
onResume
프래그먼트가 사용자와 상호작용을 할 수 있을 때 호출됩니다.
-
onPause
사용자가 프래그먼트를 떠나려 할때, 아직은 보이는 상태
-
onStop
프래그먼트가 더이상 화면에 보이지 않게 되었을 때
Fragment와 View의 Lifecycle 은 CREATED 상태가 됩니다
-
onDestoryView
프래그먼트 애니메이션이 종료되고 화면으로부터 벗어났을 경우 호출되며 Fragment View의 Lifecycle 은 DESTROYED상태가 됩니다.
Fragment View에 대한 모든 참조가 이 시점에서 제거되어야 GC에 의해 수거될 수 있습니다.
==========================================================
-
onDestroy
프래그먼트의 Lifecycle 은 DESTROYED 상태가 됩니다.
onDestroy 이후에 onDetach()가 호출됩니다.
Fragment Transaction 이 add 또는 replace 되었을때 바로 전 Fragment 의 생명주기가 어떻게 되는지 설명해 주세요
- onPause, onStop, onDestoryView 순으로 진행됩니다
- 위의 상황에서 다시 Fragment 가 보여졌을때 콜백메소드가 어떻게 동작하는지 설명해 주세요
- onCreateView ~ onViewCreated 가 실행됩니다

참고 블로그 : https://jminie.tistory.com/164#3.3.%20onCreateView()
코틀린 Enum 과 Sealed의 차이점에 대해 설명해 주세요
- Enum : 카테고리 구분에 주로 사용(부서, 날씨상태 등 등)
- Sealed : 내부 클래스를 다양한 클래스로 응용(REST 상태 분기 등)
REST 처리시 Success(성공 시 json -> data class 매핑 해야함), Fail, Network 진행 중 상황을 어떻게 구현하시겠어요?
- Sealed Class에 선언하고 각 Success, Fail, Loading상황을 내부 클래스로 구현해 각 각 구분 지어 주겠다
Jetpack Preference 와 Datastore 의 차이점 및 주 용도에 대해 설명해 주세요
- 주로 앱의 환경설정에 사용되며 개발자의 확장에 따라 다양하게 응용 가능함
- Preference : Main Thread 기반 CRUD
- DataStore : Coroutine Flow 기반 CRUD
안드로이드 앱은 메모리 관리가 중요하다. 왜 중요한지 설명을 해주세요!
- 앱이 사용할 수 있는 단말기의 메모리는 한계가 존재
- 개발자는 사용자의 상호작용에 대응하는 모든 상황을 주시하여 개발해야함
- 각 컴포넌트들의 생명주기를 정확히 이해하고 앱 개발 상황에 대처
[중급]
Kotlin Collection 중 Mutable, Immutable Collection에 대해 설명해 주세요
- Immutable : 불변이며 각 element 를 읽기만 가능(CRUD 중 R 만 가능)
- Mutable : 생성 후 자유롭게 CRUD 가 가능한 컬렉션
Kotlin Lambda Function 와 High Order Function의 차이점은 무엇인가요?
- Lambda : 익명객체
- 고차함수 : 파라미터로 람다함수, 리턴으로 함수
- 컴포즈 LazyColumn의 아이템 클릭 이벤트를 고차함수를 사용하여 구현한 경험이 있습니다.
Coroutine launch() 와 async()의 차이점에 대해 설명해 주세요
- launch : Job 리턴타입 없음
- async : 리턴타입이 존재, Deferred<T> 를 통해 리턴
Coroutine Job, Deffered의 차이점에 대해 설명해 주세요
- Job : launch 의 리턴타입
- Deferred : async 에서 쓰는 타입
RecyclerView Adapter의 ViewHolder 의 역할 및 ViewHolder Pattern 이란
- 현재 화면에 보이는 아이템이 보이지 않게 되었을때 새로 보이게 될 아이템을 위해 뷰를 다시 재사용한다
RecyclerView 의 ListAdapter은 무엇인지 설명해 주세요
- Old Item, New Item 을 비동기적으로 비교하여 바뀐 것만 R.V에 렌더링 할 수 있도록 도와줌
안드로이드에서 Bundle 이란 무엇이고 하는 역할은 무엇일까요?
- 주객체에 부가적 정보를 담을때 사용하며 타입이 정해진 맵구조를 갖습니다.
안드로이드에서 Main(UI) Thread 와 Worker(Background) Thread를 분리하는 이유에 대해 설명해 주세요
- Main은 사용자와의 인터액션, UI/UX CRUD등의 작업
- Worker는 시간이 소요되는 작업
- Main Thread는 오직 UI작업을 위한 용도로 사용되며 시간이 소요되는 작업을 Main Thread에서 수행할 경우 UI가 멈추게 되기 때문에 5초이상 지속될 경우 ANR이 발생하여 앱이 강제종료될 위험이 있다.
Worker(Background)에서 UI CRUD 작업을 진행하면 폰은 어떤 상황에 놓여질 수 있나요?
OkHttp 와 Retrofit의 차이점에 대해 설명해 주세요
- OkHttp : Http Core Socket 담당
- Retrofit : REST(비지니스 로직)에 최적화
Interceptor의 역할은 무엇인가요?
- REST에서 반복되는 request/response 를 chain 으로 엮어 실행 시킬 수 있다
(ex :: HttpLogging Debug, Retry, Header 에 Token Setting )
- Intent 간의 데이터 전달(Bundle 형태)
Intent 와 PendingIntent의 차이점에 대해 설명해 보세요
- Intent : 즉시 실행
- PendingIntent : 늦은 실행
PendingIntent는 안드로이드 개발에서 어디서 많이 사용이 될까요?
- 즉시 실행되지 않는 인텐트(Push,알람 등)
인증 토큰을 저장한다면 어디에 저장하실 건가요?
Room DB 스키마는 어디에 저장되나요?
AndroidManifest.xml가 하는 역할은 무엇인가요?
- 앱 전체의 아이덴티티를 나타냄(acitiviy들,permission , file provider 설정)
안드로이드에서 Context란 무엇인가요?
- 현재 내 앱이 동작하는 글로벌한 영역
- 안드로이드 시스템 서비스에서 제공하는 API에 접근하기 위해 사용
- Application Context 는 싱글턴, 앱이 종료 될 때 까지 살아있음, 어플리케이션 라이프사이클과 묶여있어 액티비티 범위를 벗어난 곳에 context가 필요할 때 사용된다.
- Activity Context 는 Activity Lifecycle 이 종료되면 같이 종료됨
- Dialog 등은 Activity Context를 사용함
그럼, 어플리케이션 전역에서 사용할 어떤 라이브러리를 MainActivity 에서 초기화 할 때 Context 가 필요하다고 가정해보자. 어떤 Context 를 넘겨줘야 할까?
- Application Context 이다. 만일 Activity Context 를 넘겨주게 되면, MainActivity 에 대한 참조가 메모리 상에서 GC 되지 않아 메모리 릭이 발생하기 때문이다.
따라서, 오랫동안 지속되거나 앱 전역에서 사용될 녀석의 경우 Application Context 를 넘겨주면 된다.
ViewModel 객체는 언제 소멸되나요?
- Activity 는 onDestory 시
- Fragment 는 onDestroyView 시 소멸되나 두개 이상의 Fragment에 공유시에는 activityViewModes()로 생성 시
Activity의 onDestory 시 소멸
Fragment 에서 ViewBinding 사용 시 Memory Leak이 발생하는 이유는?
- onCreate() 는 Fragment 객체를 생성하고 onDestory()는 Fragment 객체를 해제
- Fragment View는 onCreate() 후 onCreateView()에서 View가 생성되고 onDestoryView()에서 Fragment 가 안 보일때 해제되는데 이때 현재 화면에 보이지 않은 Fragment객체는 소멸되지 않고 View는 소멸된다. 이 때 ViewBinding 을 해제하지 않으면 ViewBinding Memory Leak 가 발생
Bundle 에서 Pacelize(Parceliable)을 왜 사용하는지요?
- Component(안드로이드 구성요소) 이동간 개발자가 만든 객체(들)을 넘겨 줄 때 주로 사용
현재 사용자가 세로로 스마트폰을 보고 있다가 가로로 바뀌면 앱에는 어떤 현상이 발생하는지 얘기해 주세요
현재의 액티비티가 파괴되고 다시 시작됩니다. 이때 액티비티에서 사용할 데이터 또한 사라지게 되므로 onSaveInstanceState에서 필요한 데이터를 저장하고 액티비티가 다시 시작될 때 onRestoreInstanceState에서 저장한 데이터가 복구됩니다.
[고급]
Singleton 과 Factory Pattern의 차이점에 대해 설명해 주세요
- Sington : 앱당 객체하나만 사용하는 디자인 패턴, DB관련 클래스를 사용할 때 인스턴스 여러개를 생성하게되면 그만큼 메모리와 커넥션 풀이 낭비될 수 있기 때문에 인스턴스 하나만 사용할 수 있도록 하고, 여러개의 인스턴스로 인한 동시성 문제도 해결할 수 있기때문에 싱글턴 패턴을 사용한다.
- Factory : 객체 생성 과정을 캡슐화하고 Factory클래스에 위임하게 합니다. 객체를 사용할 클라이언트 코드가 클래스에 의존하지 않기 때문에 확장성과 유지보수 측면에서 유리합니다.
Cold Flow(Stream) & Hot Flow(Stream)에 대해 얘기해 주세요
- Cold Flow[Flow]: 소비(terminal operator(collect,launchIn 등)가 시작될 때 생산을 시작
- Hot Flow[Channel]: 소비가 되지 않더라도 생산을 무조건 시작(Buffer에 쌓임)
Cold Flow 를 Hot Flow 로 변환해 주는 방법
- Hot Flow로 변환한다는 것은 StateFlow나 SharedFlow로 변환한다는 것(stateIn, shareIn 메서드를 사용합니다.)
Clean Architecture 와 MVVM이란 무엇인지 설명해 주세요
-
Clean Architecture : Clean Architecture는 소프트웨어 설계 원칙 중 하나로, 코드의 유지보수성과 확장성을 높이기 위해 여러 계층으로 구성된 구조를 제안합니다. 이 아키텍처는 의존성 규칙을 중심으로 동작하며, 특정 기술이나 프레임워크에 의존하지 않도록 설계됩니다. 각 계층은 다른 계층에 의존하지 않고, 경계를 통한 인터페이스로 상호 작용합니다.
주요 개념:
Entities: 비즈니스 규칙을 정의하는 계층. 도메인 객체가 위치합니다.
Use Cases: 애플리케이션의 구체적인 동작을 정의합니다. Entities를 사용하여 비즈니스 로직을 수행합니다.
Interface Adapters: 외부 시스템과의 인터페이스를 담당합니다. 데이터베이스, UI, 웹 API 등 다양한 인터페이스를 어댑터 패턴으로 연결합니다.
Frameworks & Drivers: 데이터베이스, 웹 프레임워크 등의 구현 세부 사항이 위치합니다.
의존성 규칙: 안쪽 계층은 바깥쪽 계층에 의존하지 않습니다.
모든 의존성은 안쪽을 향해 있습니다.
-
MVVM : MVVM은 소프트웨어 설계 패턴 중 하나로, 특히 GUI 애플리케이션에서 사용됩니다. MVVM 패턴은 사용자 인터페이스(UI) 로직을 명확히 분리하여 코드의 유지보수성과 테스트 용이성을 높입니다.
주요 구성 요소:
Model: 애플리케이션의 데이터 및 비즈니스 로직을 담당합니다. 데이터베이스나 네트워크와의 통신을 포함합니다.
View: 사용자에게 표시되는 UI를 담당합니다. 사용자의 입력을 ViewModel로 전달합니다.
ViewModel: Model과 View 사이에서 중개자 역할을 합니다. View의 상태를 관리하고, Model에서 데이터를 가져와 View에 제공합니다. 양방향 데이터 바인딩을 통해 View와 ViewModel 간의 상호 작용을 가능하게 합니다.
코틀린에서 정적필드와 정적함수(메소드)는 어떻게 구현하는지 설명해 주세요
- Companion, object class
callbackFlow 란 어떤 역할을 하는 것 인지요?
- 콜백기반의 비동기 작업을 flow로 변환시키는 역할
- flow call chain 에서는 Context를 하나만 사용할 수 있다는 점(Thread-Safe 문제)
- flow 콜체인에서 setOnClickListener 같은 콜백 함수를 사용 할 수 없는데 callbackFlow를 사용하면 가능(반드시 awaitClose를 호출하여 콜백을 해제하고 메모리 누수를 방지합니다)
Channel 과 Flow란 무엇입니까?
- 둘다 생산자/소비자 코루틴 이라는 공통점 flow는 생산과 소비를 call-chain 할수 있다는 것
RxJava(Rxkotlin) 와 Coroutine Flow의 차이점은 무엇인가요?
- 둘 다 비동기 작업을 처리하기 위한 기능이지만 Thread 기반으로 비동기를 진행, Flow 는 코루틴 기반으로 동작
REST를 왜 비동기[Thread,Coroutine, Coroutine Flow]를 사용하는지 설명해 주세요
- 사용자 원활한 상호작용(Main Thread에서 동작)을 위해 시간이 소요되는 작업은 안드로이드에서 REST 뿐 아니라 비동기 프로그램으로 사용하는 것이 원칙
Perferences & DataStore
- Perferences : Key/Value 쌍, Thread
- DataStore : Key/Value DataStore , Proto DataStore 사용할 수 있으면 코루틴으로 동작
MVVM(또는 앱아키텍처 기반 개발)개발방법에 대해 설명해 주세요(그림으로 그려서 설명할 수도)
MVVM (또는 앱아키텍처 기반 개발)개발방법을 사용하는 목적은 무엇인가요?
MVVM을 프로젝트에 적용해 보았다면 느낀 점을 얘기해 보세요
MVVM에서 Data Source 의 역할은 무엇인가요?
- Repository Pattern을 이용하여 View/ViewState에서는 어떤 저장소에서 가져오는 지 모르게 추상화 하는 방법
MVVM에서 Repository의 역할은 무엇이고 프로젝트(포트폴리오)에서 적용한 사례를 설명해 주세요
- 아키텍처에서 Repository 패턴은 중요한 역할을 합니다. Repository는 데이터 소스를 추상화하여 ViewModel이 데이터 소스의 세부 사항을 알 필요 없이 데이터에 접근할 수 있도록 합니다. 이를 통해 코드의 유지보수성과 테스트 용이성이 향상됩니다.
- 무비 프렌즈 프로젝트에서는 TMDB API를 사용하는 데이터소스에서 NAVER API 데이터소스로 변경할 수 있지만 뷰모델은 데이터소스의 변경과 상관없이 데이터 요청을 레포지터리에 보내게 됩니다.
MVVM에서 Observer의 역할은 무엇인가요?
- LiveData의 변경 유무를 관찰하여 UI에 적용하기 위함
MVVM에서 Usecase 의 역할은 무엇이지요?
- Data Layer 로 가는 통로(포트) 역할을 담당
- 위치 : View + ViewModel 사이에 존재, or ViewModel + Repository 사이에 존재
- App Business Rules(보통 CRUD)
- 장점 : Clean Architecture 에서 UseCases 는 앱의 요구사항 변경 시 유연하고 쉽게 대처
: ViewModel 과 Repository 를 분리함으로써 의존성을 줄임
LiveData와 StateFlow의 공통점과 차이점에 대해 설명해 주세요
- 공통점 : ViewModel 의 상태(속성)을 View에 반영
- 차이점 : LiveData : 옵저버 패턴을 사용, 안드로이드 API에 종속적, Fragment/Activity STOP 시 옵저버 중단
StateFlow : 생산과 소비를 이용, 순수 코틀린 API로써 안드로이드에 종속적이지 않음
lifeCycleOwner 와 lifecycleScope 의 기능들과 차이점에 대해 설명해 주세요
- lifeCycelOwner : Activity , Fragment 의 생명주기 콜백메소드를 위임받아 처리해주는 객체
- lifecycleScope : 생명주기 콜백메소드에 따라 주기적으로 동작해야하는 코루틴(비동기)처리를 담당하는 코루틴스코프
생명주기에 맞추어 해당 코루틴을 관리해 주는 역할
[Jetpack Compose]
Jetpack Compose란 무엇이고, 왜 사용되게 되었죠?
- 컴포즈 아이스 브레이크 질문
- Jetpack Compose는 Android 네이티브앱에서 선언적 UI를 구축하기 위한 Google의 최신 UI 툴킷
- 레이아웃이 필요 없고, 더 간결하고 읽기 쉬운 Kotlin 기반 안드로이드 UI 개발이 더 간소화됩니다
Column, Row, Box 의 차이점은?
Jetpack Compose Modifier 란 무엇인가요?
- Mofifier 은 패딩, 정렬 또는 Compose의 추가 제스처를 추가하는 등 UI 요소를 장식하거나 수정하는 데 사용됩니다
Recomposition 이란 무엇인가요?
- Compose는 반응형 UI 입니다. UI 상태가 변경되면 UI의 관련 부분이 재구성됩니다
remember & remberSaveable 의 차이점에 대해 얘기해 주세요
- remember는 재구성하는 동안만 데이터를 유지하며 앱이 백그라운드로 이동하거나 프로세스가 종료되면 데이터가 손실됩니다.
- rememberSaveable는 저장된 인스턴스 상태에 데이터를 저장하여 화면 회전 등의 구성 변경 시에도 데이터를 유지합니다.
LaunchedEffect와 SideEffect는 무엇인가요?
- LaunchedEffect는 컴포저블이 컴포지션에 들어올 때 코루틴을 실행하고, 컴포저블이 나갈 때 코루틴을 취소합니다.
- SideEffect는 Crashlytics 로그 등의 로깅과 같은 구성 불가능한 부작용에 사용됩니다.
rememberCoroutineScope은 무엇이고 언제 사용해야 합나요?
- 컴포저블의 수명 주기와 연결된 것을 rememberCoroutineScope제공합니다
- 백그라운드 처리와 같은 작업을 위해 컴포저블 내에서 코루틴을 시작하는 데 사용됩니다
Coroutine Flow는 무엇이며 StateFlow는 Jetpack Compose와 함께 어떻게 사용합니까?
- Flow란 한 번에 하나의 데이타만 흐르는 데이터 스트림이라고 생각하면 됩니다. 예를 들어, 서버에서 UI로 항목이나 업데이트 목록을 보내는 데 사용할 수 있습니다. 수집할 때만 "시작"됩니다
- StateFlow 라이브 업데이트(liveData와 유사)와 유사합니다. StateFlow는 항상 현재 값을 유지하므로 UI에서 즉시 사용할 수 있습니다.