[React Native] Camera와 CameraView

gyeol·2025년 5월 14일
post-thumbnail

React에서 카메라를 접근하려고 하는데 자꾸 Camera 모듈이 임포트되지 않았다는 오류가 떴다.
Camera refers to a value, but is being used as a type here. Did you mean 'typeof' Camera? 이런 오류였는데,

알고보니 Expo SDK 버전이 53 버전이어서 Camera는 더이상 권장되지 않는 컴포넌트라서 이런 오류가 뜨는 거였다.
그래서 앞서, 게시물처럼 CameraView 컴포넌트를 사용했다.

Camera vs CameraView

항목CameraCameraView
설명오래된 클래스형 컴포넌트최신 함수형 컴포넌트
도입 시기오래전부터 존재함Expo SDK 49 이후 도입
사용 방식<Camera ref={...} /> + 클래스 기반 메서드 사용<CameraView ref={...} /> + 훅 기반 메서드 사용
추천 여부더 이상 권장되지 않음권장
장점하위 호환용더 직관적이고 최신 Expo 환경에 적합
샘플 메서드cameraRef.current.takePictureAsync()cameraRef.current.takePictureAsync()
특징일부 메서드는 버그가 있음SDK 50 이상에서는 더 안정적

기존 Camera 컴포넌트는 다음과 같은 형식으로 사용되었다.

import { Camera } from 'expo-camera';

<Camera
  ref={cameraRef}
  style={{ flex: 1 }}
  type="back"
/>

CameraView도 여기서 크게 차이나진 않는다.

import { CameraView } from 'expo-camera';

<CameraView
  ref={cameraRef}
  style={{ flex: 1 }}
  facing="back"
/>

이렇게 import 해주는 컴포넌트를 CameraView로 바꿔주면 된다.

마무리

Expo SDK 50 이상을 쓰고 있다면 무조건 CameraView를 사용하는 것이 좋다.

  • Camera는 더 이상 유지보수되지 않을 수 있다.

  • CameraView는 최신 기능 (animateShutter, onCameraReady, facing, torch, HDR 등) 호환이 편리하다.

profile
공부 기록 공간 '◡'

0개의 댓글