1️⃣ Fragment 생명 주기는 어떻게 구성되어 있나요?
각 메서드가 어떻게 호출 되는지, 어떤 역할을 하는지 이해해야합니다.
Fragment의 생명주기는 Activity의 생명주기와 유사한 점이 많습니다. Activity와 동일하게 Fragment도 생성될 때엔 onCreate로 동작합니다. 하지만 그 전에 Fragment가 Activity에 붙어 등장할 땐 onAttach를 통해 동작합니다. 또한 화면을 그릴 땐 onCreateView와 onViewCreated에서 View를 생성하고 초기화합니다. 이후엔 onStart, onResume, onStop 등의 과정을 거쳐 Fragment가 소멸할 때 onDestroyView와 onDestroy가 호출되어 사라집니다. Fragment를 사용자의 화면에서 완전히 제거할 때 메모리 누수가 발생하지 않도록 onDestroy 메소드 내에서 로직을 처리해주면 됩니다. 마지막으로 Activity에서 Fragment가 분리될 땐 onDetach가 작동합니다.
2️⃣ Activity와 Fragment 간 데이터를 전달하는 방법은 무엇인가요?
수신 / 송수신2가지로 나누어서 설명할 수 있어야 합니다.
Activity와 Fragment 간의 데이터 전송 방법은 대표적으로 Bundle을 사용하는 방법이 있습니다. Bundle을 사용하면 가장 쉽고 빠르게 기본 데이터 타입의 데이터들을 전송할 수 있다는 장점이 있으나 복잡한 객체는 전달하기 어렵고 읽기 전용 데이터 타입이기 때문에 양방향 수신이 어렵습니다. 양방향 데이터 전달이 가능한 다른 방법으로는 ViewModel을 사용하는 방법이 있습니다. ViewModel을 사용하면 각 Activity와 Fragment 간의 데이터 전달은 물론, 여러 Fragment간에서도 데이터 공유를 할 수 있고 ViewModel의 자체 생명주기를 따르기 때문에 데이터 관리에 있어 좀 더 용이합니다.
3️⃣ GC, Garbage Collection이란 무엇이며 Android 환경에서 어떻게 작동하나요?
[객체, 참조, 스레드, null] 이라는 용어를 활용해보세요.
Garbage Collection이란 더 이상 사용되지 않고 있는 메모리를 회수해가는 역할을 말합니다. 여기서 "사용되지 않는 메모리", 즉 더 이상 유효하지 않은 메모리를 Garbage라 부르고 이를 모은다는 행위 때문에 Garbage Collecter라고 불리우게 됩니다. 가비지가 많아지면 메모리 누수가 발생하므로 GC가 주기적으로 동작하여 이 가비지들을 회수해야 합니다. GC는 메모리에서 Heap 영역의 크기만큼 가비지를 모았다가 사이클을 돌리는 특징이 있습니다. 일반적으로 Android에서는 JVM이 GC를 동작하여 메모리를 정리하고 있기 때문에 개발자가 직접 이를 다룰 일은 없습니다. 또 GC를 직접 동작하는 일을 권장하지 않고 있는데, 이는 GC가 알아서 안전한 스레드로 분리 되어 동작하고 있기 때문입니다. 하지만 사용하지 않는 메모리라 해도 어떠한 특정 객체가 이 메모리를 참조하고 있어 회수하지 못 할 때 메모리누수가 발생합니다. 이럴 때엔 Android Studio에서 자체적으로 제공하는 툴 메모리 프로파일러를 통해 누수되고 있는 메모리를 추적하여 개선해주면 됩니다.
4️⃣ RESTful API란 무엇인지 핵심 원칙에 맞추어 설명할 수 있나요?
REST의 구성 요소를 이해하고 RESTful 원칙을 설명할 수 있어야 합니다.
RESTful API란 두 컴퓨터가 인터넷을 통해 데이터를 안전하게 교환하기 위해 사용하는 인터페이스를 말합니다. REST는 Representational State Transfer의 약자로 웹서버와 클라이언트가 데이터를 교환할 수 있도록 도와주는 아키텍처로 HTTP 기반으로 설계되어 있어 확장성이 뛰어납니다. REST의 핵심원칙으로는 균일한 interface가 있습니다. 모든 자원에 대해 HTTP 메소드, 요청과 응답 등이 일관되어야합니다. 또한, 무상태이기 때문에 클라이언트의 상태를 서버에서 유지하고 있지 않습니다. 캐싱이라는 특징도 가지고 있는데 서버로부터의 응답시간을 개선하기 위해 이미지와 같은 자원들은 첫 번째 요청 이후로는 캐싱하여 사용하고 있습니다.
5️⃣ Android에서 클린 아키텍처란 무엇이며 어떤 장점을 가지고 있고, 어떻게 설계해야 할까요?
유지보수, 확장성, 테스트 용이성 측면에서 생각하고 클린 아키텍처의 주요 원칙을 이해할 수 있어야 합니다.
Clean Architecture란 구조를 설계할 때 사용하는 원칙을 말합니다. 클린 아키텍처의 맞추어 코드를 짜면 이 코드를 작업하지 않은 다른 개발자도 빠르게 파악이 가능하기 때문에 유지보수 측면에서 매우 탁월합니다. 또한 각 레이어 모듈에 맞춰 기능, 화면 별로 분리 되어있기 때문에 수정하고 확장하는 면에 있어 용이하고, 각 레이어 계층을 독립적으로 테스트할 수 있어 단위 테스트를 할 때 유리합니다. 클린 아키텍처를 설계할 때는 사용자에게 직접 보여지는 view단을 Presentation 레이어로 분리하고, 네트워크와 통신하고 디비에 접근하여 값을 저장하는 데이터단을 Data 레이어로 분리하며, 비즈니스 로직 부분을 담당하는 Domain 레이어로 분리할 수 있습니다. 각각의 레이어는 단방향으로 데이터가 흐르며 각각 자신의 역할에 집중하는 것이 포인트입니다.
6️⃣ 프로젝트를 하면서 중요하게 생각한 본인만의 포인트 (가치관)이 있다면?
안정성, 사용성, 아이디어 중심으로 생각해보세요.
제가 프로젝트를 하며 가장 중요하게 생각하는 부분은 "유지보수의 용이성" 측면입니다. 이유는 바로 잦은 이직과 퇴사, 팀원 교체인데요. 제가 그동안 다닌 회사에서도 그렇고 앞으로 다닐 회사에서도 제가 이직을 하거나 팀원이 이직을 하는 경우는 필연적으로 생기게 됩니다. 이 때 다른 사람의 코드를 인계받거나 제 코드를 인수해야하는 상황에 처했을 때 유연하게 그 코드를 작성하고 대처할 수 있어야된다고 생각합니다. 때문에 나의 코드를 그 누가 보아도 쉽고, 빠르고, 또 편리하게 작성 할 수 있도록 깔끔하고 읽기 쉬운 코드를 작성하는 것이 제 목표입니다. 변수명을 보다 직관적으로 작성하고, 기능별로 코드를 분리하며, 대중적으로 많이 사용하는 아키텍처에 맞추어 (사내에 별도로 사용하는 아키텍처가 없는 한,) 코드를 작성하는 것에 지향점을 두고 있습니다.
7️⃣ RecylcerView 성능을 향상시키는 방법은 무엇일까요?
호출, 반환, 재사용, 메소드, 예외처리 등의 키워드를 사용해서 설명해보세요.
RecylcerView의 성능을 향상시키는 데에는 ViewHolder를 사용하여 View들을 재사용하고, DiffUtil을 통해 변경된 아이템들만 업데이트하여 불필요한 재생성을 막습니다.
8️⃣ 비동기 프로그래밍이란 무엇이고, 왜 사용해야할까요?
효율성, 복합성, 스레드, 코루틴 등의 키워드를 사용해야 합니다.
비동기 프로그래밍의 필요성을 처음 느낀 순간은 서버와 통신하여 리스트를 불러왔는데 데이터를 가져오는 시간보다 화면을 그려내는 순간이 더 빨라 데이터가 없거나, 튕기는 현상을 마주했을 때였습니다. 그 때 처음으로 '아, 이래서 비동기를 사용하는구나!' 하고 깨달았었고 그때부터 서버 데이터 통신은 물론, 특정 환경에서 비동기적으로 동작해야할 때가 있다는 것을 알았습니다. Android에서 비동기 프로그래밍을 수행하는 건 대표적으로 Coroutine이 있습니다. 코루틴은 일종의 가벼운 스레드와 같다고 보면 되는데, 스레드처럼 여러가지의 일을 효율적이고 가볍게 실행할 수 있습니다. 코투틴을 사용하는 방법으로는 suspend 함수로 별도로 분리하여 coroutineScope 내에서 동작하는 로직을 작성해주면 된다는 것이 가장 대표적입니다. 그 외에도 코루틴의 작은 실행 흐름 단위를 제어하는 Job을 사용하거나 Dispatcher를 통해 코루틴이 실행될 스레드를 지정해줄 수 있습니다.
'etc' 카테고리의 다른 글
스파르타 국비지원 내일배움캠프? 경력직이 듣기엔 어떨까? (8) | 2024.10.13 |
---|---|
모의면접 준비 1차 (0) | 2024.09.12 |
[스파르타코딩클럽] Android 트랙을 신청한 이유 (0) | 2024.05.08 |