| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |
- onpress
- 리액트
- StickyHeader
- Unity초보
- 토이프로젝트
- 프로젝트
- ReactNative
- 디지몬상테스트
- three.js
- 게임개발
- 어플
- React
- gamedev
- 21일챌린지
- 나락퀴즈
- 똥피하기
- 사이드 프로젝트
- Flatlist
- Chrome Extension
- react-three-fiber
- 개발자
- extension
- 뇽뇽이
- 리액트네이티브
- cloudfront
- 습관
- Unity
- 모바일개발
- 66일챌린지
- 프론트엔드
- Today
- Total
개발 블로그
리액트 개발자를 위한 Animated 설명 본문
“왜 써야 하는지부터, 언제 쓰면 안 되는지까지”
React Native를 하다 보면
한 번쯤은 Animated를 마주치게 됩니다.
공식 문서도 있고 예제도 많은데,
막상 써보려고 하면 이런 생각이 먼저 듭니다.
“이거… 왜 이렇게 어려워?”
“useState로 opacity 바꾸면 되는 거 아냐?”
“이걸 꼭 써야 해?”
저도 처음엔 Animated가 괜히 복잡한 API 같았고,
실제로 몇 번은 안 써도 될 곳에 억지로 쓰다가 코드만 더 꼬였던 적도 있습니다.
이 글에서는
리액트 개발자 기준에서 Animated를 왜 쓰는지, 언제 써야 하는지
최대한 사람 말로 정리해보려고 합니다.
Animated는 뭐 하는 놈인가?
한 줄로 요약하면 이겁니다.
“부드러운 애니메이션을 성능 저하 없이 처리하기 위한 도구”
일반적인 리액트 상태 변경(useState)으로도
opacity, translate 정도는 구현할 수 있습니다.
그런데 문제가 하나 있습니다.
👉 프레임 드랍
특히 React Native에서는
JS 스레드가 바쁠 때 애니메이션까지 같이 돌리면
스크롤이 끊기거나 터치가 먹통이 되는 상황이 자주 나옵니다.
Animated는 이걸 해결하려고 만들어진 API입니다.
useState 애니메이션 vs Animated 차이
예를 들어 이런 코드가 있다고 해봅시다.
const [opacity, setOpacity] = useState(0);
setOpacity(1);
이건 즉시 값이 바뀌는 것이지
“부드럽게 변화”하는 건 아닙니다.
물론 setInterval이나 setTimeout으로 흉내는 낼 수 있지만
👉 성능도 안 좋고, 코드도 지옥이 됩니다.
Animated는 이렇게 씁니다.
const opacity = useRef(new Animated.Value(0)).current;
Animated.timing(opacity, {
toValue: 1,
duration: 300,
useNativeDriver: true,
}).start();
여기서 핵심은 이 옵션입니다.
이게 바로 Animated의 존재 이유입니다.
useNativeDriver가 중요한 이유
React Native 구조를 아주 단순하게 말하면:
- JS 스레드: 로직, 상태, 네트워크
- Native 스레드: 실제 화면 그리기
useNativeDriver: true를 쓰면
👉 JS 스레드가 바빠도 애니메이션은 네이티브에서 계속 돌아갑니다
그래서:
- 스크롤 중에도 애니메이션이 끊기지 않고
- 터치 이벤트도 안정적으로 처리됩니다
이 차이가 실제 앱에서는 꽤 큽니다.
Animated를 써야 하는 대표적인 상황
제가 실제로 써보면서 느낀 기준은 이렇습니다.
✅ 써야 하는 경우
- opacity, translate, scale 같은 연속적인 변화
- 스크롤 연동 애니메이션
- 모달, 바텀시트, 헤더 숨김/노출
- 사용자 체감이 중요한 인터랙션
❌ 굳이 안 써도 되는 경우
- 단순 show / hide
- 한 번만 바뀌는 UI 상태
- 성능 영향 없는 작은 UI
Animated는 만능이 아닙니다.
필요한 곳에만 쓰는 게 오히려 코드 품질이 좋아집니다.
Animated가 어렵게 느껴지는 이유
대부분 여기서 막힙니다.
- Animated.Value
- Animated.timing
- interpolate
- addListener
솔직히 말하면
API 설계가 직관적인 편은 아닙니다.
그래서 요즘은:
- Reanimated
- Moti
- Gesture Handler
같은 라이브러리들이 더 많이 쓰이기도 합니다.
그럼에도 Animated를 알아야 하는 이유는 명확합니다.
👉 기본 개념은 전부 Animated에서 시작했기 때문입니다.
결론: Animated를 이렇게 생각하면 편합니다
- Animated는 “애니메이션용 상태 관리 도구”
- 성능이 중요한 순간에만 사용
- 모든 UI에 쓰려고 하지 말 것
- 이해 안 되면 interpolate부터 건너뛰어도 됨
처음엔 어렵게 느껴져도
한두 번 실제 문제를 해결해보면
“아, 이래서 쓰는구나” 하고 감이 옵니다.
저도 그랬습니다.
마무리
Animated는
리액트 개발자가 한 단계 올라갈 때 꼭 한 번은 부딪히는 벽 같은 존재입니다.
피할 수 있다면 피하고 싶지만,
한 번 넘어두면 이후 UI 구현이 훨씬 편해집니다.
이 글이
“Animated 써야 하나 말아야 하나” 고민하는 분들께
조금이라도 기준이 되었으면 좋겠습니다.
'React Native' 카테고리의 다른 글
| Sticky Header 터치 안됨 문제 해결 (React Native, 2026) (0) | 2026.02.02 |
|---|---|
| React Native onPress 안됨… 원인 찾느라 시간 날린 기록 (2026) (0) | 2026.02.02 |
| React Native expo admob 세팅하는법 (0) | 2023.09.05 |