(1) 개발 언어 > Kotlin
mutable과 immutable 컬렉션의 차이점과 immutable 컬렉션의 필요성을 알고 있다.
lateinit과 lazy delegate의 차이점 및 장단점을 설명할 수 있다.
inline 키워드가 어떻게 동작하는지 장단점 위주로 이해하고 있다.
null safety의 개념을 설명할 수 있다.
scope 함수의 종류와 각각의 특징을 알고 있다.
extension 함수는 무엇이며 어떤 기준으로 선언하는 것이 좋은지 알고 있다.
일반 클래스와 비교했을 때 data class의 장점이 무엇인지 설명할 수 있다.
sealed class란 무엇이며 어떤 상황에서 사용하면 효율적인지 이해하고 있다.
collection과 sequence의 차이는 무엇이고 각각 어떤 경우에 사용하는 것이 좋은지 설명할 수 있다.
(2) 개발 도구
adb로 실행 가능한 기본 명령어의 종류와 제공 기능을 알고 있다.
Android Debugger에서 제공하는 다양한 기능을 활용하는 방법을 알고 있다.
개발자 옵션의 주요 기능에는 어떤 것들이 있으며 이를 활용해서 어떤 테스트를 진행할 수 있는지 알고 있다.
Layout Inspector를 활용할 수 있다.
Android 메모리 프로파일링 도구를 어떻게 활용할 수 있는지 설명할 수 있다.
앱에서 CPU 과다 사용이 보고될 때 문제를 분석하고 해결하는 방법을 알고 있다.
사용자가 앱을 사용하지 않았는데 지속적으로 네트워크를 사용하고 있는 것으로 보고될 때 문제를 확인하고 해결하는 방법을 알고 있다.
구조가 복잡한 UI 레이아웃이 매우 느리게 그려질 때 원인을 찾는 방법을 알고 있다.
(3) 앱 기본 항목
번들은 무엇이며, 번들에 커스텀 클래스를 넣을 때 Parcel을 구현해야 하는 이유는 무엇인지 설명할 수 있다.
브로드캐스트 리시버는 어떤 용도로 사용되며 어떤 제약을 가지고 있는지 설명할 수 있다.
서비스의 유형에는 어떤 것이 있고 각각 어떤 용도로 사용되는지 설명할 수 있다.
explicit intent와 implicit intent의 차이를 이해하고 있다.
foreground restriction과 앱 설계, 구현 시에 유의할 점을 설명할 수 있다.
PendingIntent란 어떤 용도로 사용되며, 생성 flag의 특성은 무엇인지 설명할 수 있다.
(4) UI & 내비게이션
액티비티 수명 주기를 설명할 수 있다.
앱을 백 버튼으로 종료했을 때와 홈 버튼으로 종료했을 때 앱의 상태가 어떻게 다른지 설명할 수 있다. OS 12 이상에서 변경된 사항도 설명할 수 있다.
하나의 액티비티만 사용해서 앱을 만들려면 앱의 화면 내비게이션을 어떻게 구성하는지, 액티비티를 여러 개 사용할 때에 비해 어떤 장단점이 있는지 설명할 수 있다/>
하나의 액티비티에 여러 개의 화면이 순차적으로 내비게이션되도록 스택 구조를 만들려면 어떻게 설계해야 하는지 알고 있다.
액티비티가 백그라운드에서 회수, 재생성될 때 화면과 데이터를 복구하기 위한 방법과 절차를 설명할 수 있다.
프래그먼트의 필요성과 프래그먼트를 사용할 때 액티비티 대비 장점을 설명할 수 있다.
프래그먼트와 액티비티 간의 연관성을 수명 주기 관점에서 설명할 수 있다.
프래그먼트가 중첩되었을 때 효율적으로 백 버튼을 처리하고 백 스택을 관리할 수 있는 방법을 알고 있다.
프래그먼트 트랜잭션을 addToBackStack(), commit(), commitNow(), executePendingTransaction()과 연관지어 설명할 수 있다.
프래그먼트 트랜잭션에 setReorderingAllowed(true)를 지정하면 어떤 변화가 일어나고 어떤 장단점이 있는지 구체적인 예를 들어 설명할 수 있다.
(5) 뷰 & 레이아웃
dp의 개념과 이에 따른 리소스 처리 방법을 알고 있다.
뷰의 레이아웃이 크기가 정해지는 과정을 설명할 수 있다.
다크 모드, 다국어 지원과 같은 다양한 환경을 지원하는 방법을 설명할 수 있다.
복잡한 UI 때문에 초기 화면이 너무 느려 보일 때 어떻게 개선할 수 있는지 알고 있다.
include나 viewstub을 사용해 서브 레이아웃을 추가할 때 include에 비해 viewstub은 어떤 장단점이 있는지 설명할 수 있다.
테마와 스타일은 각각 무엇이며 어떤 상황에 활용할 수 있는지 알고 있다.
findViewById()를 대체할 수 있는 방법에는 어떤 것이 있으며 각각의 장단점은 무엇인지 알고 있다.
(6) 아키텍처
MVC, MVP, MVVM 등 아키텍처 패턴의 필요성과 각 패턴의 구조, 장단점을 설명할 수 있다.
Android ViewModel 컴포넌트가 왜 필요한지, 특징은 무엇인지 설명할 수 있다.
LiveData의 특징은 무엇이며 어떻게 활용해야 하는지 알고 있다.
액티비티와 프래그먼트 간의 데이터 공유 및 통신을 어떻게 구현할 수 있는지, 각각 어떤 장단점이 있는지 알고 있다.
안드로이드에서 권장하는 3-레이어 아키텍처를 이해하고 있으며 장단점을 논할 수 있다.
single source of truth가 무엇이고 왜 필요한지 설명할 수 있다.
(7) 멀티 스레딩
UI 스레드와 worker 스레드는 무엇이며, 왜 UI 스레드는 하나만 사용하는지 설명할 수 있다.
서버에 있는 이미지 아이콘을 리스트 뷰에 반영하는 방법을 설명할 수 있다.
worker 스레드에서 나온 결과를 UI에 반영하는 방법을 설명할 수 있다.
한 시간마다 서버 정보를 받아서 노티 영역에 날씨를 표시해야 할 때 어떤 구조로 설계해야 하는지 설명할 수 있다.
HandlerThread는 무엇이고 Thread와 어떤 차이가 있는지 설명할 수 있다.
(8) 데이터 처리
서버에서 XML/JSON 문서를 받아 앱에서 해당 데이터를 처리하는 과정과 기술을 설명할 수 있다.
기존 DB 테이블에 칼럼을 추가하는 방법을 설명할 수 있다.
앱의 설정 정보를 관리하는 방법을 설명할 수 있다.
갤러리의 이미지 리스트를 얻어오는 방법을 설명할 수 있다.
DB 처리에 필요한 Cursor는 왜 필요한지 설명할 수 있다.
앱에서 접근할 수 있는 데이터 영역을 유형별로 구분해서 설명할 수 있다.
캐시 영역과 데이터 영역의 차이점을 설명할 수 있다.
(9) 네트워킹
HTTP GET과 POST의 차이를 설명할 수 있다.
여러 개의 파일을 POST로 한 번에 업로드하는 방법을 알고 있다.
HTTP로 서버에서 데이터를 받아오려고 할 때 필요한 타임아웃을 설명할 수 있다.
HTTP 캐시에 관여하는 헤더의 종류와 의미를 설명할 수 있다.
chunked 형의 콘텐츠 형식을 설명할 수 있다.
대용량 파일 다운로드에서 앱이 중단되었다가 다시 실행되는 경우에 이어받기 기능을 지원하려면 어떻게 설계해야 하는지 알고 있다.
(10) 메모리
안드로이드 코드에서 메모리 누수가 발생할 수 있는 코드의 예시를 설명할 수 있다.
앱에서 메모리 누수를 감지하고 원인을 제거하는 방법을 설명할 수 있다.
(11) 코루틴
코루틴이란 무엇이며, 왜 필요한지, 어떤 문제를 해결할 수 있는지 설명할 수 있다.
scope와 dispatcher의 개념과 용도를 설명할 수 있다.
코루틴에서 flow와 channel은 무엇인지 설명할 수 있다.
코루틴에서 동시에 실행 중인 비동기 작업 진행 과정에서 발생하는 예외를 어떻게 처리할 수 있는지 설명할 수 있다.
(12) Jetpack Compose
Jetpack Compose와 기존 뷰 기반 UI의 차이점과 장단점을 설명할 수 있다.
Compose에서 상태(state)란 무엇이며 왜 중요한지 설명할 수 있다.
Recomposition이란 무엇이며 어떤 상황에 발생하고 어떻게 최적화할 수 있는지 설명할 수 있다.
LaunchedEffect와 DisposableEffect의 용도를 설명할 수 있다.
(13) 알림 & 푸시
FCM을 구성하여 테스트 메시지를 보내고 이를 단말에서 수신하도록 구현할 수 있다.
notification channel, group이란 무엇이며 어떻게 활용하는지 설명할 수 있다.
(14) 웹뷰
웹뷰에서 사용자가 http://www.naver.com URL을 클릭했을 때 http://m.naver.com으로 로드하려면 어떻게 처리해야 하는지 설명할 수 있다.
HTML 페이지에서 앱으로 데이터를 전달하려면 앱에서 어떻게 구현해야 하는지, 반대로 앱에서 정의한 자바스크립트를 웹페이지에서 실행하고 결과를해야 하는지 설명할 수 있다.
웹뷰의 쿠키는 어떻게 관리하며, 앱 처리 과정에서 쿠키에 접근하려면 어떻게 해야 하는지 설명할 수 있다.
(15) 협업
코드 리뷰를 진행할 때 상대 코드의 어떤 요소를 리뷰할 수 있는지 설명할 수 있다.
코드 리뷰의 긍정적인 효과를 설명할 수 있다.
본인이 주로 리뷰하는 코드 이슈를 설명할 수 있다.
리뷰 코멘트를 남길 때 상대가 납득할 수 있는 근거(performance, convention 등)를 들 수 있다.
(16) 품질관리
코딩 컨벤션을 왜 준수해야 하는지 이해하고 있다.
정적 분석이란 무엇이고 어떤 도움을 줄 수 있는지, 정적 분석에 활용할 수 있는 도구에는 무엇이 있는지 설명할 수 있다.
테스트의 유형에는 어떤 것들이 있으며, 각각 테스트 단위(범위)의 측면에서 어떻게 다른지 설명할 수 있다.
테스트 가능한 코드를 작성하려면 어떻게 해야하는지 설명할 수 있다.
일부 사용자에게서 문제가 보고되었는데 개발 환경에서 재현에 실패한 경우 어떻게 대응할 수 있는지 설명할 수 있다.
test와 androidTest의 차이를 설명할 수 있다.
(17) 유지 보수
장애 대응 절차를 설명할 수 있다.
Android Vitals에서 제공하는 기능은 무엇인지 설명할 수 있다.
ANR이란 무엇인지 설명할 수 있다.
ANR trace란 무엇이고 어떻게 활용할 수 있는지 설명할 수 있다.
(18) 형상 관리
Git의 기본적인 기능을 잘 알고 활용하고 있다.
patch, cherry pick 등의 기본적인 기능을 상황별로 잘 알고 있다.
interactive rebase를 사용할 수 있다.
master, develop, branch 등의 버전 관리 방법을 알고 있다.
git branch 전략을 잘 이해하고 있다. 또는 git flow를 잘 이해하고 응용하고 있다.
1.0.0 버전을 배포하고 1.1.0 버전을 개발 하는 중에 1.0.0 버전에 버그가 발생하여 수정해야 하는 경우 변경 사항을 효율적으로 관리하는 방법을있다.
코드 병합 과정에서 git merge와 rebase는 어떤 차이가 있는지 설명할 수 있다.
(19) 빌드/배포
Gradle 의존성 설정에서 implementation과 API의 차이점은 무엇인지 설명할 수 있다.
product flavor란 무엇이며 어떤 때 필요한지 설명할 수 있다.
dependency tree란 무엇이며 어떤 경우에 활용할 수 있는지 설명할 수 있다.
앱 번들(aab)과 apk의 차이를 설명할 수 있다.
앱의 키 사이닝이 무엇이고 왜 필요한지 설명할 수 있다.
버전 이름과 버전 코드의 용도 및 차이점을 알고 있다.
난독화를 하는 이유를 설명할 수 있다.
ABI(application binary interface)란 무엇이며 배포 과정에서 유의할 점은 무엇인지 설명할 수 있다.
CI/CD 툴을 사용하는 목적을 설명할 수 있다.
CI/CD 툴과 연계해서 코드 품질과 개발 프로세스를 관리하는 방법을 설명할 수 있다.
Play Store에서 알파, 베타, 실제 버전의 차이를 알고 있다.