react-native

React Native 스크롤 처리 정리: ScrollView와 FlatList 차이와 선택 기준

mirabo01 2026. 1. 17. 09:52

화면에 내용이 조금만 늘어나면
바로 이런 상황을 마주친다.

  • 화면 아래가 잘려서 안 보인다
  • 리스트를 만들었는데 스크롤이 안 된다
  • ScrollView로 했더니 느려진다

React Native에서
스크롤은 기본이 아니다.
명시적으로 컴포넌트를 선택해야 한다.

이 글에서는
ScrollView와 FlatList의 차이와 사용 기준
실무에서 헷갈리지 않게 정리한다.


이 글이 필요한 사람

  • 화면이 길어졌는데 스크롤이 안 되는 경우
  • ScrollView와 FlatList 차이를 잘 모르는 경우
  • 리스트 성능 이슈가 걱정되는 경우

React Native에서 스크롤이 필요한 이유

React Native의 View는
스크롤 기능이 없다.

콘텐츠가 화면을 넘어가면
그냥 잘린다.

그래서 스크롤이 필요한 화면에서는
반드시 전용 컴포넌트를 사용해야 한다.

  • ScrollView
  • FlatList

[이미지: React Native 스크롤 컴포넌트 개념 비교]


ScrollView란 무엇인가

ScrollView는
전체 내용을 한 번에 렌더링하는 스크롤 컨테이너다.

import { ScrollView, Text } from 'react-native';

<ScrollView>
  <Text>내용 1</Text>
  <Text>내용 2</Text>
  <Text>내용 3</Text>
</ScrollView>

ScrollView 특징

  • 내부 콘텐츠를 전부 렌더링
  • 사용법이 단순함
  • 짧은 콘텐츠에 적합

언제 쓰면 좋을까

  • 설정 화면
  • 약관 페이지
  • 고정된 길이의 설명 화면

화면에 보이지 않는 내용까지
전부 메모리에 올린다는 점은 꼭 기억해야 한다.


ScrollView에서 자주 하는 실수

❌ View에 스크롤을 기대하는 경우

<View>
  {/* 아무리 길어도 스크롤 안 됨 */}
</View>

❌ ScrollView 안에 또 ScrollView를 넣는 경우

  • 스크롤 충돌 발생
  • 제어가 어려워짐

ScrollView는
한 화면에 하나가 기본 원칙이다.


FlatList란 무엇인가

FlatList는
리스트 전용 스크롤 컴포넌트다.

import { FlatList, Text } from 'react-native';

const data = [
  { id: '1', title: '아이템 1' },
  { id: '2', title: '아이템 2' },
];

<FlatList
  data={data}
  keyExtractor={(item) => item.id}
  renderItem={({ item }) => <Text>{item.title}</Text>}
/>

FlatList 특징

  • 필요한 아이템만 렌더링
  • 스크롤 성능이 좋음
  • 데이터 기반 렌더링

리스트가 조금이라도 길다면
ScrollView 대신 FlatList가 정답이다.


FlatList에서 꼭 알아야 할 props

data

렌더링할 배열 데이터

renderItem

각 아이템을 어떻게 그릴지 정의

keyExtractor

각 아이템의 고유 key 지정

keyExtractor={(item) => item.id}

이걸 안 주면
경고 메시지가 계속 나온다.


ScrollView vs FlatList 차이 정리

구분ScrollViewFlatList

렌더링 방식 전체 렌더링 필요한 만큼만
성능 리스트에 불리 대량 데이터에 유리
사용 난이도 쉬움 조금 더 복잡
적합한 경우 짧은 화면 목록 화면

기준은 하나다.
데이터가 배열이면 FlatList를 먼저 고려한다.


FlatList가 어색하게 느껴지는 이유

처음엔 이런 느낌이 든다.

  • JSX가 아니라 설정하는 느낌
  • renderItem 문법이 낯설다

하지만 실제 앱에서는
리스트 화면이 훨씬 많다.

  • 피드
  • 상품 목록
  • 알림 리스트

그래서
FlatList에 익숙해지는 게 훨씬 중요하다.


실무에서 자주 겪는 문제

  • ScrollView로 리스트 만들었다가 성능 저하
  • FlatList에 flex 스타일 안 줘서 화면이 안 나옴
  • keyExtractor 누락

이 중 대부분은
**“언제 뭘 써야 하는지”**를 몰라서 생긴다.


정리

  • View에는 스크롤이 없다
  • ScrollView는 짧은 화면용
  • FlatList는 리스트 전용
  • 데이터 기반 UI는 FlatList가 기본이다

다음 글에서는
사용자 입력을 처리하는 컴포넌트
TextInput과 Button / Pressable을 정리해보려고 한다.