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

Milad Bonakdar
작성자
컴포넌트, 훅, 내비게이션, API 호출, 리스트, AsyncStorage, 모바일 기본기를 중심으로 주니어 React Native 면접을 연습하세요.
소개
주니어 React Native 면접에서는 React로 간단한 모바일 화면을 만들 수 있는지, 네이티브 렌더링을 설명할 수 있는지, 훅으로 상태를 관리하는지, 화면 이동, API 데이터 로딩, 민감하지 않은 로컬 데이터 저장을 다룰 수 있는지를 주로 봅니다. 좋은 답변은 실용적이어야 합니다. 무엇을 쓰는지, 언제 피하는지, iOS와 Android에서 어떤 트레이드오프가 생기는지 말할 수 있어야 합니다.
이 가이드는 첫 React Native 역할에서 나올 가능성이 높은 질문을 연습하도록 구성했습니다. 라이브러리 세부사항을 외우기보다 React 기본기, 핵심 컴포넌트, 내비게이션, 폼, 리스트, API 호출, 스토리지, 모바일 디버깅에 집중하세요.
React 기본 사항 (6 문제)
1. React Native는 무엇이며 React와 어떻게 다른가요?
답변:
- React: 웹 사용자 인터페이스를 구축하기 위한 JavaScript 라이브러리
- React Native: React를 사용하여 네이티브 모바일 앱을 구축하기 위한 프레임워크
- 주요 차이점:
- React Native는 네이티브 컴포넌트(DOM 아님)로 렌더링됩니다.
- 웹 API 대신 네이티브 API를 사용합니다.
- 다른 스타일링 접근 방식 (CSS 없음, StyleSheet 사용)
- iOS 및 Android용 플랫폼별 코드
희귀도: 매우 흔함 난이도: 쉬움
2. React Native의 핵심 컴포넌트는 무엇인가요?
답변: React Native는 네이티브 UI 요소에 매핑되는 내장 컴포넌트를 제공합니다.
- View: 컨테이너 컴포넌트 (웹의
div와 유사) - Text: 텍스트 표시 (모든 텍스트는
Text컴포넌트에 있어야 함) - Image: 이미지 표시
- ScrollView: 스크롤 가능한 컨테이너
- TextInput: 텍스트 입력 필드
- TouchableOpacity/Pressable: 터치 가능한 요소
- FlatList: 효율적인 목록 렌더링
- Button: 기본 버튼 컴포넌트
희귀도: 매우 흔함 난이도: 쉬움
3. View와 ScrollView의 차이점을 설명하세요.
답변:
- View: 정적 컨테이너. 화면 경계를 벗어난 콘텐츠는 스크롤할 수 없습니다.
- ScrollView: 스크롤 가능한 컨테이너. 모든 자식을 한 번에 렌더링합니다 (큰 목록의 경우 메모리 집약적일 수 있음).
- 사용 시기:
- View: 화면에 맞는 레이아웃의 경우
- ScrollView: 적은 양의 스크롤 가능한 콘텐츠의 경우
- FlatList: 큰 목록의 경우 (보이는 항목만 렌더링)
희귀도: 매우 흔함 난이도: 쉬움
4. React Hooks는 무엇이며 가장 일반적으로 사용되는 것은 무엇인가요?
답변: Hooks는 함수형 컴포넌트에서 상태 및 수명 주기 기능을 사용할 수 있도록 하는 함수입니다.
- 일반적인 Hooks:
- useState: 컴포넌트 상태 관리
- useEffect: 부작용 처리 (데이터 가져오기, 구독)
- useContext: 컨텍스트 값에 액세스
- useCallback: 함수 메모이제이션
- useMemo: 비용이 많이 드는 계산 메모이제이션
- useRef: DOM 요소 참조 또는 값 유지
희귀도: 매우 흔함 난이도: 쉬움
5. useEffect 훅과 의존성 배열을 설명하세요.
답변:
useEffect는 렌더링 후 부작용을 실행합니다. 의존성 배열은 실행 시기를 제어합니다.
- 배열 없음: 모든 렌더링 후 실행
- 빈 배열
[]: 초기 렌더링 후 한 번 실행 - 의존성 포함
[dep1, dep2]: 의존성이 변경될 때 실행
희귀도: 매우 흔함 난이도: 중간
6. Virtual DOM은 무엇이며 React는 어떻게 사용하나요?
답변: Virtual DOM은 웹 React의 개념입니다. React는 가벼운 UI 트리를 유지하고, 상태 변경 후 비교해 바뀐 부분만 업데이트합니다. React Native에서도 같은 reconciliation 개념이 적용되지만, 최종 출력은 브라우저 DOM 노드가 아니라 네이티브 뷰입니다.
- 면접에서 말할 포인트:
- 상태가 바뀌면 영향을 받는 컴포넌트가 다시 렌더링됩니다
- React가 새 컴포넌트 트리와 이전 트리를 비교합니다
- React Native가 필요한 업데이트를 네이티브 UI 컴포넌트에 적용합니다
- 안정적인 key, 적절한 state 위치, 실제 re-render 문제를 해결할 때만 memoization으로 최적화합니다
- 중요한 정정: React Native는 HTML이나 브라우저 DOM을 업데이트하지 않습니다.
희귀도: 흔함 난이도: 쉬움
컴포넌트 및 Props (4 문제)
7. Props와 State의 차이점은 무엇인가요?
답변:
- Props:
- 부모에서 자식으로 전달
- 읽기 전용 (변경 불가능)
- 컴포넌트 구성에 사용
- State:
- 컴포넌트 내에서 관리
- 변경 가능 (변경 가능)
- 동적 데이터에 사용
희귀도: 매우 흔함 난이도: 쉬움
8. 함수형 컴포넌트와 클래스 컴포넌트의 차이점은 무엇인가요?
답변:
- 함수형 컴포넌트:
- 더 간단한 구문
- 상태 및 수명 주기에 hooks 사용
- 최신 React에서 선호
- 클래스 컴포넌트:
- 이전 접근 방식
this.state및 수명 주기 메서드 사용- 여전히 지원되지만 덜 일반적
희귀도: 흔함 난이도: 쉬움
9. 자식 컴포넌트에서 부모 컴포넌트로 데이터를 전달하는 방법은 무엇인가요?
답변: props로 전달된 콜백 함수를 사용합니다.
희귀도: 매우 흔함 난이도: 쉬움
10. key prop은 무엇이며 왜 중요한가요?
답변:
key prop은 React가 목록에서 변경, 추가 또는 제거된 항목을 식별하는 데 도움이 됩니다.
- 목적: 렌더링 성능 최적화
- 요구 사항: 형제 간에 고유해야 하며 안정적이어야 합니다 (목록이 변경될 수 있는 경우 인덱스를 사용하지 마세요).
희귀도: 매우 흔함 난이도: 쉬움
스타일링 및 레이아웃 (3 문제)
11. React Native에서 컴포넌트 스타일을 지정하는 방법은 무엇인가요?
답변: React Native는 CSS가 아닌 스타일링에 JavaScript 객체를 사용합니다.
- StyleSheet API: 최적화된 스타일 생성
- 인라인 스타일: 직접 스타일 객체 (성능이 떨어짐)
- Flexbox: 기본 레이아웃 시스템
희귀도: 매우 흔함 난이도: 쉬움
12. React Native에서 Flexbox를 설명하세요.
답변: Flexbox는 React Native의 기본 레이아웃 시스템입니다.
- 주요 속성:
- flexDirection:
row또는column(기본값:column) - justifyContent: 주 축을 따라 정렬
- alignItems: 교차 축을 따라 정렬
- flex: 비례 크기 조정
- flexDirection:
희귀도: 매우 흔함 난이도: 중간
13. margin과 padding의 차이점은 무엇인가요?
답변:
- Padding: 컴포넌트 내부의 공간 (콘텐츠와 테두리 사이)
- Margin: 컴포넌트 외부의 공간 (컴포넌트와 이웃 사이)
희귀도: 흔함 난이도: 쉬움
내비게이션 (3 문제)
14. React Navigation은 무엇이며 어떻게 사용하나요?
답변: React Navigation은 React Native에서 가장 인기 있는 내비게이션 라이브러리입니다.
- 유형:
- Stack Navigator: 화면 스택 (push/pop)
- Tab Navigator: 하단 탭
- Drawer Navigator: 측면 드로어 메뉴
희귀도: 매우 흔함 난이도: 중간
15. 화면 간에 매개변수를 전달하는 방법은 무엇인가요?
답변:
데이터에 대한 두 번째 매개변수와 함께 navigate 함수를 사용합니다.
희귀도: 매우 흔함 난이도: 쉬움
16. 내비게이션 옵션은 무엇이며 헤더를 사용자 정의하는 방법은 무엇인가요?
답변: 내비게이션 옵션은 화면 모양과 동작을 제어합니다.
희귀도: 흔함 난이도: 쉬움
데이터 및 저장소 (4 문제)
17. React Native에서 API에서 데이터를 가져오는 방법은 무엇인가요?
답변:
fetch API 또는 Axios와 같은 라이브러리를 사용합니다.
희귀도: 매우 흔함 난이도: 중간
18. AsyncStorage는 무엇이며 어떻게 사용하나요?
답변: AsyncStorage는 작고 민감하지 않은 데이터를 위한 비동기 key-value 저장소입니다.
- 좋은 사용 예: 테마 선택, 온보딩 플래그, 캐시된 JSON, 간단한 설정
- 피해야 할 것: 인증 토큰, API 키, 비밀번호, 큰 데이터셋, 복잡한 쿼리가 필요한 데이터
- 민감한 데이터: iOS Keychain 또는 Android 암호화 저장소를 지원하는 유지보수되는 라이브러리를 사용하세요
희귀도: 매우 흔함 난이도: 쉬움
19. FlatList와 ScrollView의 차이점은 무엇인가요?
답변:
- ScrollView:
- 모든 자식을 한 번에 렌더링
- 작은 목록에 적합
- 큰 목록에 대한 메모리 집약적
- FlatList:
- 보이는 항목만 렌더링 (지연 로딩)
- 큰 목록에 효율적
- 내장된 최적화
희귀도: 매우 흔함 난이도: 쉬움
20. 양식 및 사용자 입력을 처리하는 방법은 무엇인가요?
답변: 상태를 사용하여 제어되는 컴포넌트를 사용합니다.
희귀도: 매우 흔함 난이도: 중간


