모바일 개발 · 중급
React Native 컴포넌트에서 `useEffect` 훅의 의존성 배열(dependency array)과 클린업(cleanup) 함수를 사용하여 발생할 수 있는 일반적인 메모리 누수나 불필요한 재실행 문제를 어떻게 방지할 수 있나요?
힌트 · 의존성 배열은 훅의 재실행 조건을 제어하고, 클린업 함수는 컴포넌트 언마운트 시 구독 해제나 타이머 해제 등 리소스 정리를 담당합니다.
의존성 배열클린업 함수최적화메모리 누수재실행 방지
모범답안
useEffect 훅에서 의존성 배열과 클린업 함수를 제대로 사용하지 않으면 메모리 누수나 불필요한 재실행 문제가 발생할 수 있습니다.
의존성 배열은 useEffect가 언제 다시 실행될지를 결정합니다. 배열에 필요한 값만 넣어야 불필요한 재실행을 막을 수 있습니다. 빈 배열 []을 사용하면 컴포넌트가 처음 마운트될 때만 실행되지만, 외부 변수를 참조하면 예상치 못한 동작이 발생할 수 있습니다. 이럴 땐 useCallback이나 useMemo를 활용해서 함수나 객체의 참조가 변경되지 않도록 관리해야 합니다.
클린업 함수는 컴포넌트가 언마운트될 때 실행되어 리소스를 정리합니다. 예를 들어, 구독을 해제하거나 타이머를 제거하는 데 사용됩니다. 클린업 함수를 제대로 구현하지 않으면 메모리 누수가 발생할 수 있습니다. 특히, 비동기 작업이나 이벤트 리스너를 사용하는 경우 클린업 함수가 필수적입니다.
useEffect(() => {
const timer = setTimeout(() => {
// ...
}, 1000);
return () => clearTimeout(timer); // 클린업 함수
}, []);
요약하자면, 의존성 배열을 통해 재실행을 제어하고, 클린업 함수를 통해 메모리 누수를 방지하는 것이 중요합니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 React Native 면접 질문
- React Native에서 레이아웃을 구성할 때 Flexbox를 활용하는 방법과 주요 속성 (예: `flexDirection`, `justifyContent`, `alignItems`)에 대해 설명해주세요.
- React Native 컴포넌트에서 `state`와 `props`는 각각 어떤 역할을 하며, 이 둘의 주요 차이점은 무엇인가요?
- React Native 함수형 컴포넌트에서 `useEffect` Hook은 주로 어떤 목적으로 사용되며, 의존성 배열의 역할에 대해 설명해주세요.
- React Navigation 라이브러리에서 `Stack Navigator`와 `Tab Navigator`의 주요 차이점은 무엇이며, 각각 어떤 사용자 경험을 제공할 때 더 적합하다고 생각하시나요?
- React Native 애플리케이션에서 `Context API`와 `Redux` (또는 MobX와 같은 전역 상태 관리 라이브러리)의 차이점을 설명하고, 각각 어떤 상황에 더 적합하다고 판단하시나요?
- React Native에서 `StyleSheet.create`를 사용하여 스타일을 정의하는 것이 인라인 스타일이나 일반 JavaScript 객체를 직접 사용하는 것보다 어떤 이점들이 있나요?