Android Q&A26 [안드로이드 면접] - 24 : 1. 레포지토리(Reopository) 패턴이란? 더보기 데이터의 출처에 관계없이 동일한 인터페이스로 데이터에 접근할 수 있도록 하는 패턴이다. 비즈니스 로직과 데이터 레이어를 분리하기 위해 Data Layer 를 캡슐화 시키는 것이 Repository 패턴의 주된 목적이다. 즉, DataSource 를 캡슐화 한다. 💡 데이터의 출처에 관계없이란? 외부 DB 와 내부 DB 관계없이라고 생각을 하면 될 것 같다. 장점 -> 데이터 로직과 비즈니스 로직을 분리할 수 있다. -> 도메인에서는 일관된 인터페이스를 통해 데이터를 요청할수 있다. -> 객체 간의 결합도가 감소한다. 2. SAA (Single Activity Architecture) 란? 더보기 하나의 액티비티와 여러 개의 프래그먼트로 구성하여 프.. 2023. 3. 1. [안드로이드 면접] - 23 : 1. Android KTX 란? 더보기 안드로이드 프레임워크와 서포트 라이브러리를 모두 지원하여, 안드로이드를 위한 코틀린 코드를 간결하고 편하게 사용할 수 있게 설계된 확장 라이브러리이다. (Jetpack, AndroidFramework 등등) 2. SurfaceView 와 View 의 차이는? 더보기 View 와 달리, SurfaceView 는 다른 View 들과는 달리 직접 SurfaceView 가 컨텐츠를 표시하지 않는다. 일반적으로 View 를 화면에 표시하기 위해 하나의 메인 스레드에서 처리가 된다. 하지만, 뷰를 표시하기까지 5초 이상이 걸린다면, ANR 이 발생한다. 그런데 우리가 만약 카메라 프리뷰, 즉 실시간으로 화상을 카메라로부터 받아서 1초에 수십 프레임 이상의 속도로 화면을 업데이.. 2023. 3. 1. [안드로이드 면접] - 22 : 1. 네이비게이션의 3대 컴포넌트는? 더보기 Navigation graph : 네비게이션 에디터를 사용하거나, xml 을 직접 수정함으로써 앱에서 사용할 모든 화면과 연관관계 이동 방법을 정의할 수 있다. Navigation host : 네비게이션 그래프에서 정의한 프래그먼트를 표시하는 컨테이너다. 컨테이너 뷰를 추가하면 된다. Navigation controller : 화면 전환을 수행하는 컨트롤러다. 프래그먼트를 전환하기 위해서는 호스트로부터 컨트롤러 인스턴스를 얻어서 네비게이션을 실행하게 된다. 2. Safe Args 에 대해서 설명하시오. 더보기 네비게이션 라이브러리를 통해 프래그먼트 간의 데이터 통신을 쉽게할 수 있다. 보통 key-value 타입에 번들을 사용한다. 번들은 타입 안정성을 보장하.. 2023. 2. 28. [안드로이드 면접] - : 21 1. 선언형 프로그래밍과 명령형 프로그래밍의 차이는? 더보기 명령형 프로그래밍은 컴퓨터가 어떻게 행동해야 하는지를 프로그래밍하는 것이고, 선언형 프로그래밍은 컴퓨터가 무엇을 해야할지를 프로그래밍 하는 것이다. 명령형 프로그래밍은 컴퓨터가 어떻게 행동해야할 것인가, 모든 행동을 코드에 짜넣어야 한다. 반면에 선언적 프로그래밍은 이러한 과정이 없다. 그냥 단순하게 무엇을 하지를 명시하기만 하면된다. 따라서, 프로그래밍 공부를 하지 않은 상태에서 생각을 해보면 인간의 사고와 매우 비슷한 방식으로 구동되기 때문에 쉽게 이해할 수 있다. 선언형 프로그래밍은 인간의 사고와 유사하게 하기 위해서 추상화 시켜 프로그래밍이 된 것이다. 실제로는 명령형 구문이 선언형 뒤에서 코드가 실행되고 있다고 생각하면 될 것이다. 2.. 2023. 2. 27. [안드로이드 면접] - 20 : 1. Dispatchers 를 하드코딩 하면 안되는 이유 더보기 아래는 하드코딩을 하는 경우이다. // DO inject Dispatchers class NewsRepository( private val defaultDispatcher: CoroutineDispatcher = Dispatchers.Default ) { suspend fun loadNews() = withContext(defaultDispatcher) { /* ... */ } } // DO NOT hardcode Dispatchers class NewsRepository { // DO NOT use Dispatchers.Default directly, inject it instead suspend fun loadNews() = withCo.. 2023. 2. 24. [안드로이드 면접] - 19 : 1. repeatOnLifeCycle 에 대해서 설명해보시오. 더보기 lifecycleScope 한계 때문에 해당 메서드를 사용한다. Flow 를 사용할 때, lifecycleScope 에서 사용하게 된다면, 액티비티가 onDestroy() 될 때는 데이터 collect 가 중단된다. 하지만, 액티비티 종료할 때 호출되는 onDestroy() 메서드가 아니라, 백그라운드로 내려갈 때에는 collect 중단이 되지 않는다. 앱이 백그라운드로 내려가면, 액티비티는 onStop() 이 수행되므로, lifecycleScope 는 계속해서 collect 에서 데이터를 수직한다. 기존에 이 문제를 해결하기 위해선, onStart 에서 collect 를 시작하고, onStop 에서 collect 를 중지하는 작업을 .. 2023. 2. 24. [안드로이드 면접] - 18 : 1. 뷰를 구성하는 레이아웃은 XML 파일 기반으로 구성되어있다. 왜 그런지 한 번 생각해봤는가? 더보기 사용자 이벤트를 받아, 동작을 제어하는 코드로부터 따로 표시하기가 더 좋다. 또한, UI 의 구조를 시각화하기가 쉽다. - 레이아웃 코드와 비즈니스 로직 코드가 완전히 분리가 됨으로써 개발자와 디자이너의 역할 분담 또한 가능하다. - 자바나 코틀린 코드로 레이아웃을 작성했다면, 레이아웃 변경할 때마다 소스를 재 컴파일을 해야할 것이다. 반대로 레이아웃만 수정 시에 코드를 컴파일하지 않아도 되므로 개발 속도 향상이 있다. 2. Context 란 무엇인가? 더보기 컨텍스트는 말 그대로 맥락이라는 뜻으로 애플리케이션 환경을 알고있는 인터페이스라고 말할 수 있다. 쉽게 말해서 컨텍스트를 이용하면 getPac.. 2023. 2. 20. [안드로이드 면접] - 17 : 1. 코틀린 확장함수(Extension Function) 란? 더보기 언어별 프레임워크 안에 오픈소스로 구현되어 있는 여러 함수들 있다. 예를 들면 자바 toString() 함수를 생각해보자. 해당 메서드는 출력 형식은 고정되어 있지만, 우리가 필요한 형식이 아닐 수 있다. 여기서 우린 이 부분을 사용하는 목적에 맞게 커스텀해서 사용하고 싶은 생각을 할 수 있지만, 자바는 안 된다. 하지만, 코틀린에서는 이러한 요구사항을 처리할 수 있는 함수가 라이브러리에 존재한다. 이게 바로 확장함수이다. 기본으로 정의된 함수인 것처럼 새로운 기능을 추가하는 기능이다. 정리하자면, 기존 클래스에 새로운 함수를 확장한다. 2. 코틀린 범위지정함수(Scope Function)란? 더보기 범위지정 함수는 고차함수로 정의되고.. 2023. 2. 18. 이전 1 2 3 4 다음