주니어 Android 개발자 면접 질문과 답변

Milad Bonakdar
작성자
Kotlin, 생명주기, Jetpack Compose, Room, 네트워킹, 코루틴 질문으로 주니어 Android 면접을 준비하세요.
소개
주니어 Android 개발자 면접에서는 Kotlin 기본기, Android 생명주기, Compose 상태 관리, 로컬 저장소, 네트워크 호출, 코루틴을 실무적으로 설명할 수 있는지 확인합니다. 좋은 답변은 작은 앱을 안정적으로 만드는 방식과 연결됩니다. UI 상태를 적절한 위치에 두고, 메인 스레드를 막지 않으며, 데이터를 안전하게 저장하고, 오류를 명확히 처리해야 합니다.
이 가이드로 짧은 답변을 연습한 뒤 이력서나 포트폴리오의 작은 프로젝트와 연결해 보세요. 할 일 앱, 날씨 앱, API 기반 화면을 예로 들면 외운 답변보다 훨씬 구체적으로 들립니다.
Kotlin 기본 사항 (6 문제)
1. Kotlin에서 val과 var의 차이점은 무엇입니까?
답변:
val: 불변(읽기 전용) 변수를 선언합니다. 한 번 할당되면 해당 값을 변경할 수 없습니다.var: 가변 변수를 선언합니다. 초기화 후 값을 변경할 수 있습니다.- 모범 사례: 안전을 위해 기본적으로
val을 사용하십시오. 값을 재할당해야 할 때만var을 사용하십시오.
희소성: 매우 흔함 난이도: 쉬움
2. Kotlin에서 Nullable 타입과 Safe Call 연산자를 설명하십시오.
답변: Kotlin의 타입 시스템은 null 포인터 예외를 방지하기 위해 nullable 타입과 non-nullable 타입을 구별합니다.
- Nullable 타입: 타입 뒤에
?를 추가합니다:String? - Safe Call (
?.): 객체가 null이 아닌 경우에만 메서드를 호출합니다. - Elvis 연산자 (
?:): null인 경우 기본값을 제공합니다. - Not-null 단정 (
!!): null인 경우 예외를 발생시킵니다 (가급적 사용하지 마십시오).
희소성: 매우 흔함 난이도: 쉬움
3. Kotlin에서 class와 data class의 차이점은 무엇입니까?
답변:
- 일반 클래스: 표준 클래스 정의
- Data Class: 데이터를 보유하는 데 유용한 메서드를 자동으로 생성합니다.
equals()및hashCode()toString()copy()함수- 디스트럭처링을 위한
componentN()함수
희소성: 매우 흔함 난이도: 쉬움
4. Kotlin에서 람다 표현식과 고차 함수는 무엇입니까?
답변:
- 람다: 값으로 전달될 수 있는 익명 함수
- 고차 함수: 함수를 매개변수로 사용하거나 함수를 반환하는 함수
희소성: 매우 흔함 난이도: 중간
5. Kotlin에서 확장 함수를 설명하십시오.
답변: 확장 함수를 사용하면 소스 코드를 수정하지 않고도 기존 클래스에 새 함수를 추가할 수 있습니다.
희소성: 흔함 난이도: 쉬움
6. Kotlin에서 ==와 ===의 차이점은 무엇입니까?
답변:
==: 구조적 동등성 (equals()를 사용하여 값을 비교합니다.)===: 참조적 동등성 (메모리 참조를 비교합니다.)
희소성: 흔함 난이도: 쉬움
Android 구성 요소 (5 문제)
7. Activity란 무엇이며 해당 라이프사이클을 설명하십시오.
답변: Activity는 사용자 인터페이스가 있는 단일 화면을 나타냅니다. 잘 정의된 라이프사이클이 있습니다.
onCreate(): Activity가 생성됩니다. UI를 초기화하고 콘텐츠 뷰를 설정합니다.onStart(): Activity가 표시됩니다.onResume(): Activity가 포그라운드에 있고 상호 작용이 가능합니다.onPause(): Activity가 포커스를 잃습니다 (다른 Activity가 포그라운드로 이동).onStop(): Activity가 더 이상 보이지 않습니다.onDestroy(): Activity가 소멸됩니다.
희소성: 매우 흔함 난이도: 쉬움
8. Activity와 Fragment의 차이점은 무엇입니까?
답변:
- Activity: 전체 화면을 나타냅니다. 사용자 상호 작용을 위한 진입점입니다. 자체 라이프사이클이 있습니다.
- Fragment: Activity 내에서 UI의 재사용 가능한 부분입니다. 하나의 Activity에 여러 Fragment가 존재할 수 있습니다. 호스트 Activity에 연결된 자체 라이프사이클이 있습니다.
- Fragment의 장점:
- Activity 간 재사용성
- 모듈식 UI 구성 요소
- 태블릿 지원 (멀티 패널 레이아웃)
- Navigation component 통합
희소성: 매우 흔함 난이도: 쉬움
9. Intent란 무엇이며 그 유형은 무엇입니까?
답변: Intent는 다른 앱 구성 요소에서 작업을 요청하는 데 사용되는 메시징 객체입니다.
- 명시적 Intent: 시작할 정확한 구성 요소를 지정합니다 (클래스 이름으로).
- 암시적 Intent: 일반 작업을 선언하고 시스템이 적절한 구성 요소를 찾습니다.
희소성: 매우 흔함 난이도: 쉬움
10. Android에서 Service란 무엇입니까?
답변: Service는 사용자 인터페이스 없이 백그라운드에서 실행되어 장기 실행 작업을 수행하는 구성 요소입니다.
- 유형:
- 포그라운드 Service: 눈에 띄는 작업을 수행합니다 (음악 플레이어). 알림을 표시합니다.
- 백그라운드 Service: 사용자가 직접적으로 알 수 없는 작업을 수행합니다.
- 바운드 Service: 구성 요소가 바인딩하여 상호 작용할 수 있습니다.
희소성: 흔함 난이도: 중간
11. BroadcastReceiver란 무엇입니까?
답변: BroadcastReceiver는 시스템 전체 브로드캐스트 알림에 응답하는 구성 요소입니다.
- 사용 사례: 배터리 부족, 네트워크 연결 변경, SMS 수신, 부팅 완료
- 등록:
- 정적: AndroidManifest.xml에서 (최신 Android 버전에서는 제한됨)
- 동적: 코드에서 (선호됨)
희소성: 흔함 난이도: 쉬움
UI 개발 (4 문제)
12. LinearLayout, RelativeLayout 및 ConstraintLayout의 차이점은 무엇입니까?
답변:
- LinearLayout: 자식을 단일 행 또는 열로 정렬합니다. 간단하지만 중첩된 레이아웃으로 이어질 수 있습니다.
- RelativeLayout: 자식을 서로 또는 부모를 기준으로 배치합니다. 더 유연하지만 복잡합니다.
- ConstraintLayout: 최신, 유연한 레이아웃입니다. 플랫 뷰 계층 구조입니다. 복잡한 UI에 권장됩니다.
희소성: 매우 흔함 난이도: 쉬움
13. RecyclerView란 무엇이며 어떻게 작동합니까?
답변: RecyclerView는 뷰를 재활용하여 큰 목록을 효율적으로 표시하는 위젯입니다.
- 구성 요소:
- Adapter: 데이터를 뷰에 바인딩합니다.
- ViewHolder: 뷰에 대한 참조를 보유합니다 (
findViewById호출을 피합니다.) - LayoutManager: 항목을 배치합니다 (Linear, Grid, Staggered).
희소성: 매우 흔함 난이도: 중간
14. Jetpack Compose란 무엇입니까?
답변: Jetpack Compose는 Android의 최신 선언적 UI 툴킷입니다.
- 선언적: UI를 빌드하는 방법이 아닌 UI가 어떻게 보여야 하는지 설명합니다.
- 장점: 더 적은 코드, 직관적, 강력, 개발 속도 향상
- Composable 함수: Compose UI의 빌딩 블록
희소성: 매우 흔함 난이도: 쉬움
15. match_parent와 wrap_content의 차이점은 무엇입니까?
답변: 이들은 뷰 크기를 정의하는 레이아웃 매개변수입니다.
match_parent: 뷰가 부모의 크기를 채우도록 확장됩니다.wrap_content: 뷰가 콘텐츠에 맞게 크기를 조정합니다.- 고정 크기: 특정 dp 값 (예:
100dp)
희소성: 매우 흔함 난이도: 쉬움
데이터 및 네트워킹 (5 문제)
16. Android에서 네트워크 요청을 어떻게 만듭니까?
답변:
네트워킹에는 Retrofit 또는 OkHttp와 같은 라이브러리를 사용하십시오. HttpURLConnection을 직접 사용하지 마십시오.
희소성: 매우 흔함 난이도: 중간
17. Room이란 무엇이며 어떻게 사용합니까?
답변: Room은 더 쉬운 데이터베이스 액세스를 위한 SQLite에 대한 추상화 레이어입니다.
- 구성 요소:
- Entity: 테이블을 나타냅니다.
- DAO (Data Access Object): 데이터베이스 작업을 정의합니다.
- Database: 데이터베이스 홀더
희소성: 매우 흔함 난이도: 중간
18. SharedPreferences란 무엇입니까?
답변: SharedPreferences는 적은 양의 기본 데이터를 키-값 쌍으로 저장합니다.
- 사용 사례: 사용자 설정, 환경 설정, 간단한 플래그
- 적합하지 않은 경우: 대용량 데이터, 복잡한 객체 (대신 Room 사용)
희소성: 매우 흔함 난이도: 쉬움
19. SharedPreferences에서 apply()와 commit()의 차이점은 무엇입니까?
답변: 둘 다 SharedPreferences에 변경 사항을 저장하지만 동작이 다릅니다.
apply(): 비동기식입니다. 즉시 반환됩니다. 변경 사항은 백그라운드에서 디스크에 기록됩니다. 반환 값이 없습니다.commit(): 동기식입니다. 변경 사항이 기록될 때까지 차단됩니다. 부울 (성공/실패)을 반환합니다.- 모범 사례: 반환 값이 필요하지 않으면
apply()를 사용하십시오.
희소성: 흔함 난이도: 쉬움
20. Kotlin에서 코루틴이란 무엇입니까?
답변: 코루틴은 비동기 코드를 순차적으로 작성하는 방법을 제공하여 읽고 유지 관리하기 쉽게 만듭니다.
- 장점: 경량, 구조화된 동시성, 예외 처리
- 주요 개념:
suspend: 일시 중지 및 재개될 수 있는 함수launch: 코루틴을 시작합니다 (발사 후 잊어버림).async: 코루틴을 시작하고 결과를 반환합니다.- Dispatchers: 코루틴이 실행되는 스레드를 제어합니다.
희소성: 매우 흔함 난이도: 중간


