
Hook이란 무엇인가?: Hook은 함수 컴포넌트에서 React의 다양한 기능을 사용할 수 있도록 해주는 기능이다.
useState : 화면에 영향을 주는 상태를 저장한다.useEffect : 렌더링 이후 React 외부와 관련된 작업을 처리한다.useRef : 리렌더링 없이 값을 저장하거나 DOM 요소에 접근한다.useMemo : 계산된 값을 기억한다.useCallback : 함수 참조를 기억하여 필요할 때 같은 함수 참조를 재사용한다.왜 Hooks를 사용하는가?: React 컴포넌트는 화면을 구성하지만, 단순히 화면만 보여주는 것 외에도 다양한 기능이 필요하다.
예)
함수 컴포넌트와 Hooks의 관계: Hooks는 함수 컴포넌트 내부에서 React의 기능을 사용할 수 있도록 해준다. 즉, 함수 컴포넌트에서 상태를 관리하거나 렌더링 이후 특정 작업을 실행하기 위해 Hooks를 사용한다.
함수 컴포넌트란?: 함수 컴포넌트(Function Component)는 함수를 이용하여 만든 React 컴포넌트이다. 일반적으로 JSX를 반환하여 화면을 구성한다.
function으로 선언하는 방법

화살표 함수로 선언하는 방법

React.memo를 사용하면 Props가 변경되지 않은 자식 컴포넌트의 불필요한 리렌더링을 줄일 수 있다.useState란?: useState는 컴포넌트의 State를 저장하고 관리하기 위한 Hook이다.const [state, setState] = useState(initialValue);useState의 괄호 안에는 State의 초기값을 넣는다. ex) useState(0)→초기값은 0setCount(1)과 같이 Setter 함수를 사용하여 State를 변경한다.useEffect란?: useEffect는 컴포넌트 렌더링 이후 API 요청, 이벤트 등록, 타이머 설정 등 React 외부와 관련된 작업을 처리하기 위한 Hook이다.useEffect(() => { 실행할 작업 }, [dependencies]);[]: 빈 배열을 전달하면 일반적으로 컴포넌트가 처음 화면에 나타난 후 Effect가 실행된다.[value]: value가 변경되면 Effect가 다시 실행된다.useEffect에서 생성한 작업을 정리하기 위한 기능이다. 예를 들어 타이머나 이벤트 리스너를 제거할 때 사용할 수 있다.useEffect: 컴포넌트 렌더링 → useEffect 실행 → API 요청 → 데이터 받기 → State에 데이터 저장 → 리렌더링 → 화면에 데이터 표시useRef란?: useRef는 값을 저장하지만 값이 변경되어도 리렌더링을 발생시키지 않는 Hook이다.
역할
기본 문법: const ref = useRef(initialValue);
.current: useRef로 생성한 Ref 객체의 값은 .current에 저장된다. 값을 읽거나 변경할 때 .current를 사용한다.
예)

값 저장: useRef에 저장된 값은 컴포넌트가 다시 렌더링되어도 유지된다.
하지만 .current의 값을 변경해도 화면은 다시 렌더링되지 않는다.
useState와 차이useState | useRef | |
|---|---|---|
| 값 저장 | 가능 | 가능 |
| 값 변경 시 | Setter 함수 사용 | .current 변경 |
| 값 변경 시 리렌더링 | 발생 | 발생하지 않음 |
useRef는 특정 HTML 요소에 직접 접근할 때 사용할 수 있다. 예를 들어 input 요소에 포커스를 이동시키는 기능을 구현할 수 있다.useMemo란?: useMemo는 계산한 결과를 기억하는 Hook이다.const value = useMemo(() => { 계산하는 코드 }, [dependencies]);useMemo를 사용하여 필요한 경우 이전 계산 결과를 재사용할 수 있다.useMemo 역시 값을 기억하고 관리하는 과정이 필요하기 때문에 모든 값에 사용한다고 성능이 항상 향상되는 것은 아니다. 필요한 경우에 사용하는 것이 중요하다.useCallback이란?: useCallback은 함수 참조를 기억하는 Hook이다.
역할: 컴포넌트가 리렌더링될 때 함수가 불필요하게 새로 생성되는 것을 줄이는 데 사용할 수 있다.
기본 문법: const callback = useCallback(() => { 실행할 함수 }, [dependencies]);
Dependency Array: Dependency Array의 값이 변경되면 새로운 함수 참조를 반환하고, 변경되지 않았다면 이전 함수 참조를 유지한다.
함수를 기억하는 이유: 컴포넌트가 리렌더링되면 컴포넌트 내부에서 선언한 함수도 새로운 함수로 생성될 수 있다. 함수 참조가 변경되면 자식 컴포넌트의 Props가 변경된 것으로 판단될 수 있기 때문에 필요한 경우 useCallback을 사용한다.
React.memo와 관계: React.memo는 Props가 변경되지 않았을 때 컴포넌트의 불필요한 리렌더링을 줄이는 데 사용할 수 있다. 하지만 부모 컴포넌트가 리렌더링될 때마다 새로운 함수를 Props로 전달하면 함수 참조가 변경되어 자식 컴포넌트는 Props가 변경되었다고 판단할 수 있다. 이때 useCallback을 사용하여 함수 참조를 유지하면 React.memo와 함께 최적화에 도움이 될 수 있다.
언제 사용하는가?
React.memo를 사용하는 경우| Hook | 기억하는 것 |
|---|---|
useMemo | 계산된 값 |
useCallback | 함수 참조 |
useMemo -> 값 기억
useCallback -> 함수 참조 기억
| Hook | 주요 역할 | 리렌더링 |
|---|---|---|
useState | 상태 관리 | State 변경 시 발생 |
useEffect | 렌더링 이후 작업 실행 | 직접 발생시키지 않음 |
useRef | 값 저장, DOM 접근 | 발생하지 않음 |
useMemo | 계산 결과 기억 | 직접 발생시키지 않음 |
useCallback | 함수 참조 기억 | 직접 발생시키지 않음 |