티스토리 뷰
15일차
전역 변수와 정적 변수의 차이는?
전역 변수는 클래스 외부에서 선언되며 모든 함수나 클래스에서 접근이 가능합니다.
정적 변수는 클래스 내부에서 선언되며 클래스의 인스턴스를
생성하지 않고도 클래스 이름을 통해 접근하는 것이 가능합니다.
Android에서 Parcelable과 Serializable의 차이점과 각각의 사용 시기는 언제인가요?
Parcelable은 개발자가 직접 직렬화/역직렬화 하는 로직을 작성해야합니다.
Serializable은 객체의 상태를 자동으로 직렬화 할 수 있지만 Parceable보다 느릴 수 있습니다.
Parcelable은 Android에 최적화 되어있기에 Android 앱에서 성능이 중요하고
객체의 직렬화/역직렬화가 빈번하게 일어날 땐 Parcelable을 사용하며,
간단한 구현을 하거나 비 Android 환경에서는 Serializable을 사용합니다.
16일차
OS가 메모리 관리를 해야하는 이유에 대해 설명해주시고,
메모리 관리를 위해 어떤 전략을 사용하는지 설명해주세요.
운영체제는 각 프로세스가 자신에게 할당된 메모리에만 접근하도록 보장하여
시스템 메모리와 프로세스의 메모리 공간을 관리하는 역할을 합니다.
그렇기에 운영체제는 사용자 및 프로세스의 메모리 영역에 접근할 권한을 가지고 있습니다.
운영체제의 메모리 관리 전략에는 메모리를 고정된 크기나 동적으로 분할하는 파티셔닝 기법,
물리적 메모리와 가상 메모리를 페이지 단위로 나눈 뒤 가상 메모리 주소를 물리적 메모리 주소로 변환하는 페이징 기법,
프로세스의 메모리를 논리적 단위인 세그먼트로 나누어 관리하는 세그멘테이션 기법 등이 있습니다.
Android 애플리케이션의 메모리 누수를 발견하고 해결하는 방법에 대해 설명해 주세요.
안드로이드 스튜디오에서 Profiler를 통해 메모리 누수를 발견할 수 있습니다.
액티비티나 프래그먼트를 전역적으로 참조하지 않도록 하고,
비동기 작업이나 콜백에서 액티비티나 프래그먼트의 참조를 유지하지 않도록 합니다.
뷰 바인딩을 사용하는 경우 onDestroyView()에서 바인딩 객체에 null을 할당하여 메모리 누수를 방지할 수 있습니다.
17일차
가상 메모리가 무엇인지 설명해주세요.
가상 메모리란 프로세스가 물리적 메모리보다 크더라도 실행이
가능하도록 하기 위해서 사용하는 기법입니다.
가상 메모리 환경에서는 앱 실행에 필요한 부분만이 메모리에 올라가며
앱의 나머지 부분은 디스크에 남게 됩니다.
결론적으로 결국 빠르고 작은 기억장치인 RAM을 크고 느린 기억장치인 디스크와 병합하여,
하나의 크고 빠른 기억장치처럼 동작하게 하는 기법입니다.
Android 애플리케이션에서 ANR(Application Not Responding)이
발생하는 원인과 이를 방지하기 위한 방법은 무엇인가요?
ANR이란 메인스레드가 작업을 완료하지 못해 애플리케이션이
일정 시간 동안 사용자 입력에 반응하지 않을 때 발생하는 오류입니다.
메인 스레드에서 긴 시간 동안 실행되는 작업을 수행하거나
지나치게 긴 반복 작업을 수행하면 ANR이 발생할 수 있습니다.
또한 스레드 간의 자원 충돌로 인한 데드락이나 과도하게 UI 요소를
렌더링 하는 경우에도 ANR이 발생할 수 있습니다.
ANR을 방지하기 위해 시간이 오래 걸리는 작업들은 백그라운드 스레드에서 처리하도록 하거나
코루틴이나 Hander/Looper를 사용하여 비동기적으로 처리하도록 합니다.
18일차
캐시(cache) 메모리를 왜 사용하는지, CPU의 적중률을 높이기 위해
어떤 원리를 사용하는지에 대해 설명해주세요.
캐시 메모리는 자주 참조하는 데이터나 명령어를 임시로 저장해 두어,
CPU가 이에 빠르게 접근할 수 있도록 하여 CPU의 성능을 높입니다.
캐시 메모리는 한 번 사용된 데이터나 명령어는 다시 사용될 가능성이 높다는
사실을 이용해 최근에 사용된 데이터를 저장하고,
데이터가 메모리에 연속적으로 배치되있을 경우 인접한 데이터도 참조될 가능성이
높다는 사실을 이용해 특정 데이터가 요청되면 그 주변 데이터도
캐시로 가져오는 방식으로 CPU 적중률을 높입니다.
Android의 Activity와 Fragment 간의 데이터 전달 방법을 설명해 주세요.
액티비티에서 프래그먼트를 데이터를 전달하려면 액티비티에서 프래그먼트를
생성할 때 데이터를 Bundle에 담는 방식으로 전달할 수 있습니다.
프래그먼트에서 액티비티로 데이터를 전달하려면 인텐트를 활용합니다.
SharedViewModel를 활용해 액티비티와 프래그먼트의 ViewModel을 공유하여
액티비티에서 뷰모델을 업데이트하고 프래그먼트에서 관찰하여 데이터를 전달받는 방법도 있습니다.
19일차
메모리가 고갈되면 일어나는 현상에 대해 설명해주세요.
메모리가 부족한 경우 운영체제는 가상메모리를 사용하여
디스크 일부를 메모리처럼 사용하게 됩니다.
그로 인해 프로그램이 요청한 데이터를 디스크에서 가져오는 일이 잦아지면
앱이 멈추거나 응답이 지연될 수 있습니다.
메모리가 완전히 고갈된다면 운영체제에서 요청된 메모리를 할당하지 못해 발생하는
OOM 오류가 발생하여 프로그램이 강제로 종료될 수 있습니다.
프로젝트에서 RecyclerView를 사용할 때의 성능 최적화 방법을 설명해 주세요.
데이터가 변경되었을 때 전체 목록을 갱신하는 대신,
DiffUtil을 사용해 변경된 항목만 업데이트하도록 합니다.
리스트에 여러 종류의 뷰가 있을 경우, getItemViewType()를 활용해 아이템의 유형을
구분하면 불필요한 뷰 생성 및 메모리 사용을 줄일 수 있습니다.
onBindViewHolder에서 복잡한 작업이나 비동기 작업을 하지 않고,
데이터를 미리 준비하거나 데이터를 캐싱해두고 사용하여 성능을 최적화할 수 있습니다.
setHasFixedSize를 사용해 항목의 고정된 크기로 설정하고,
불필요한 애니메이션을 비활성화하여 성능을 향상시킬 수 있습니다.
'내일배움캠프 > Android 모의면접' 카테고리의 다른 글
튜터님과의 모의면접 #1 (0) | 2024.10.27 |
---|---|
면접카타 5주차 정리 (2) | 2024.10.27 |
면접카타 3주차 정리 (1) | 2024.10.27 |
면접카타 2주차 정리 (0) | 2024.10.27 |
면접카타 1주차 정리 (0) | 2024.10.27 |