티스토리 뷰
튜터님과 모의면접 #2
Fragment 생명 주기는 어떻게 구성되어 있나요?
프래그먼트가 액티비티에 연결되는 시점에 onAttach가 호출되며
이 때 context에 대한 참조를 얻게 됩니다.
프래그먼트가 생성되는 시점에서 onCreate가 호출되며
여기서 프래그먼트 관련 초기 설정을 진행합니다.
onCreateView가 호출되는 시점에서 뷰가 생성되고 해당 함수의 호출이 완료되면,
onViewCreated가 호출되어 뷰의 초기 설정을 진행할 수 있습니다.
onViewStateRestored는 저장해둔 상태가 복원되었을 때 호출됩니다.
프래그먼트가 사용자에게 보여질 수 있을 때 onStart가 호출되고
사용자와 상호작용이 가능한 상태가 되면 onResume이 호출됩니다.
프래그먼트가 사용자와 상호작용을 중단하면 onPause가 호출되고
프래그먼트가 화면에서 보이지 않을 때 onStop이 호출되는데 그 다음으로,
onSaveInstanceState를 호출해 뷰의 상태를 저장할 수 있습니다.
프래그먼트의 뷰가 소멸될 때는 onDestroyView를 호출해 뷰와 관련된 자원을 해제하고,
프래그먼트가 소멸될 때는 onDestroy를 호출해 프래그먼트에 할당된 자원을 해제합니다.
프래그먼트가 액티비티로부터 해제되면 onDetach가 호출됩니다.
Activity와 Fragment 간 데이터를 전달하는 방법은 무엇인가요?
데이터를 송신만 하는 경우에는
액티비티에서 프래그먼트로 데이터를 보낼 땐 번들 객체를 이용하고,
프래그먼트에서 액티비티로 데이터를 보낼 땐 프래그먼트에서 데이터 전달
인터페이스를 정의하고 액티비티에서 구현하는 방법을 사용합니다.
데이터 송수신이 모두 필요할 때는
액티비티와 프래그먼트가 동일한 뷰모델을 사용하여
데이터를 공유하는 방법을 사용합니다.
GC, garbage collection 이란 무엇이며 Android 환경에서 어떻게 작동하나요?
가비지 컬렉션은 더 이상 필요하지 않은 객체를 자동으로 찾아낸 뒤
메모리에서 해제하여 메모리 누수를 방지하는 기능입니다.
Android 앱에서 사용되는 모든 데이터는 객체로 생성되어 힙 메모리에 할당됩니다.
각 객체는 메모리의 특정 위치에 저장되며, 해당 객체에 접근하기 위해서는
객체의 메모리 주소를 가르키는 변수인 참조가 필요합니다.
참조가 해제된다면 가비지 컬렉션은 해당 객체를 메모리에서 제거합니다.
스레드가 종료될 때 스레드에 존재하는 객체의 참조는 해제됩니다.
객체가 더 이상 필요 없게 되면, 해당 객체에 대한 참조를 null로 설정합니다.
RESTful API 란 무엇인지 핵심 원칙에 맞추어 설명할 수 있나요?
RESTful API는 클라이언트와 서버 간의 상호작용을 정의하는 아키텍처 스타일로
클라이언트 - 서버 구조를 가지며 서버가 클라이언트의 상태를 유지하지 않습니다.
리소스를 고유한 URI를 통해 식별하며 HTTP 메서드를 사용해 리소스를 조작합니다.
리소스는 클라이언트가 원하는 형식으로 반환될 수 있습니다.
Android 에서 클린 아키텍처란 무엇이며 어떤 장점을 가지고 있고,
어떻게 설계해야 할까요?
클린 아키텍쳐란 앱을 UI, 컨트롤러, 유즈 케이스, 엔티티 이렇게 4개의 계층으로
나누어 각 계층의 책임을 명확히 분리하는 디자인 패턴입니다.
각 계층이 분리되어 있기에 유지보수가 용이하고,
새로운 기능을 구현할 때 기존 코드를 최소한으로 변경하며 확장이 가능합니다.
또한 비즈니스 로직이 독립적으로 존재하여 기능별 테스트가 용이합니다.
클린 아키텍처를 설계할 때는 레이어를 UI, Domain, Data로 나누어 설계합니다.
UI Layer에는 사용자 인터페이스와 뷰모델을,
Domain Layer에는 비즈니스 로직에 해당하는 유즈케이스를,
Data Layer에는 레파지토리의 구현체 및 데이터 관련 파일을 작성합니다.
프로젝트를 하면서 중요하게 생각한 본인만의 포인트 (가치관) 이 있다면?
제는 코드의 가독성과 유지보수성을 중점으로 두고 개발을 하였습니다.
저는 코드를 이해하기 쉽도록 하기 위해 함수 및 변수명을 직관적으로 작성하였고,
설명이 필요한 부분에는 자세하게 주석을 달았습니다.
이로 인해 제가 작성했던 로직을 까먹는 일을 방지할 수 있었고,
제가 해당 로직을 작성한 이유를 팀원들에게 쉽게 전달할 수 있었습니다.
또한 UI, 비즈니스 로직, 데이터 관련 로직을 명확하게 구분하여
유지보수가 쉬운 코드를 작성하고자 하였습니다.
Recyclerview 성능을 향상시키는 방법은 무엇일까요?
리싸이클러뷰에서 아이템을 업데이트할 때 DiffUtil을 사용하여
변경된 부분만 업데이트하도록 합니다.
레이아웃 크기가 일정하다면 setHasFixedSize(true) 메서드를 호출해
불필요한 레이아웃 측정을 방지함으로써 성능을 향상 시킬 수 있습니다.
예외 발생 시 앱 성능에 영향을 줄 수 있으므로 onBindViewHolder에서
스크롤 시 발생할 수 있는 예외를 처리하는 로직을 작성합니다.
비동기 프로그래밍이란 무엇이고, 왜 사용해야할까요?
비동기 프로그래밍은 특정 작업이 완료될 때까지 기다리지 않고,
그 동안 다른 작업을 계속 수행할 수 있도록 하는 프로그래밍 방식입니다.
비동기 작업은 스레드나 코루틴을 활용하여 백그라운드에서 처리됩니다.
서버 요청이나 파일 다운로드 등 시간이 오래걸리는 작업을 동기식으로 처리하면
해당 작업이 완료될 때까지 프로그램이 느려지거나 멈추는 문제가 발생합니다.
이러한 문제를 해결하기 위해 시간이 오래 걸리는 작업은 비동기식으로 처리합니다.
작업이 끝날 때까지 기다리는 로직을 계속 추가할 필요가 없어
코드의 복합성이 감소하며, UI가 응답성을 유지할 수 있기에 효율적입니다.
'내일배움캠프 > Android 모의면접' 카테고리의 다른 글
면접카타 7주차 정리 (0) | 2024.10.27 |
---|---|
면접카타 6주차 정리 (1) | 2024.10.27 |
튜터님과의 모의면접 #1 (0) | 2024.10.27 |
면접카타 5주차 정리 (2) | 2024.10.27 |
면접카타 4주차 정리 (0) | 2024.10.27 |