안드로이드(1)

sumi Yoo·2022년 9월 9일

💡 Activity에 대해 lifecycle과 함께 설명해주세요.
4대 컴포넌트 중 사용자와 직접적으로 상호작용하는 컴포넌트입니다.
액티비티 라이프사이클은 앱을 사용하는 사용자의 행동에 따라서 변경되는 액티비티의 상태를 의미합니다.
상태는 onCreate-onStart-onResume-onPause-onStop-onDestroy로 이루어져 있으며 각 콜백 함수들마다 적절한 처리를 해주어야 유저가 정상적으로 앱을 사용할 수 있습니다.

💡 Configuration 변경시 어떤 일이 발생하나요?
화면 회전, 테마 변경 등과 같은 상황에서 구성 변경이 일어나게 됩니다.
변경이 일어나게 되면 기존에 있던 모든 뷰가 파괴되고 재생성되며 메모리에 저장되어 있던 데이터가 모두 날라가기 때문에 데이터를 유지하기 위해 ViewModel 사용과 savedInstance를 통해 데이터를 저장하고 복구하는 방법도 있고 local db에 저장하는 방법도 있습니다.

💡 ConstraintLayout의 특징을 설명해주세요.
다른 뷰를 바탕으로 현재 뷰에 제약을 걸어 위치를 표현하는 레이아웃입니다.
뷰 계층을 1단까지 줄일 수 있어, 뷰를 탐색하고 그리는 시간을 줄일 수 있다는 장점이 있습니다.

💡 visibility modifier의 종류와 차이를 설명해주세요.
public, private, protected, internal이 있습니다.
public은 클래스 외부에서 접근이 가능합니다.
private는 클래스 내에서만 접근할 수 있습니다.
protected는 클래스와 이를 상속받는 하위 클래스들에서 접근이 가능합니다.
internal은 같은 모듈 내에서만 접근 가능합니다.

💡 data class은 언제 사용하나요? 장점이 있다면 무엇인가요?
리사이클러뷰의 아이템, 룸에 저장할 데이터 등 주로 정보를 나타낼 때 사용합니다.
toString(), hashCode(), equals(), copy() 메소드를 자동으로 구현해주기에 보일러플레이트 코드를 줄일 수 있다는 장점이 있습니다.

💡 의존성 주입이 무엇인지 설명해주세요.
클래스 내부에서 사용하는 객체를 외부에서 생성하여 주입해주는 것을 의미합니다.

💡 Hilt와 같은 의존성 주입 프레임워크를 사용하는 이유가 있을까요?
안드로이드 컴포넌트 중에서 직접 생성자를 주입할 수 없는 액티비티나 프래그먼트의 경우에 생성되는 시점에 의존성을 주입해 줄 수 있다는 점과 보일러 플레이트 코드 없이 컴파일 시점에 의존성을 주입해주기 때문에 의존성 주입 관련 에러를 컴파일 시점에 잡을 수 있고, 단위 테스트를 용이하게 만들어줍니다.

💡 ViewModel에서 LiveData를 사용할 때 이벤트를 처리하는 흐름을 설명해주세요.
viewModel에서 liveData로 상태를 가지고 있다가 변화가 생기면 liveData를 옵저버하고 있는 곳에서 변화를 감지하여 UI를 갱신합니다.

💡LiveData를 Kotlin Flow로 전환하게 되는 이유는 무엇일까요?
LiveData는 기본적으로 android 의존성을 가지고 있기 때문에 model에서 값을 가져올때 android 의존성을 없애기 위해 kotlin Flow로 전환하는 추세입니다.

💡 프로젝트에 적용하신 아키텍처를 설명해주세요. (적용해본 아키텍처가 여러개라면) MVP, MVVM 은 어떤 차이가 있나요?
MVP, MVVM 아키텍처는 View와 Model을 분리하는 것이 특징인 아키텍처입니다. MVP는 데이터의 흐름이 단방향으로 이루어져 있지만, MVVM은 Databinding을 사용하여 View와 ViewModel간의 양방향 통신이 이루어져 View를 업데이트 하는 코드를 줄일 수 있는 장점이 있습니다.

0개의 댓글