리액트 훅이란?
글을 통해 전하고 싶은 메세지
- 리액트 훅은 "리액트 기능을 활용할 수 있는 함수"이다.
- 리액트 훅은 "함수형 컴포넌트에서만 사용할 수 있다."
- 리액트 훅은 "클래스형 컴포넌트의 단점을 보완하고자 만들어졌다."
- 리액트 훅은 "make it easier build great UI" 라는 철학을 바탕으로 만들어졌다.
동기
리액트를 사용하면서 핵심 기능 중 하나인 Hooks
에 대해서 제대로 고민을 해본 적이 없었다.
항해플러스를 진행하면서, 리액트 훅의 원리를 깊게 이해하고, 직접 구현해볼 기회가 생겼고, 다음과 같은 영상을 보게 되었다.
학습을 시작하면서 위의 영상을 보게 되었고, 이번 기회에 제대로 정리를 해보고자 한다.
리액트의 개발 철학

리액트는 "make it easier build great UI" 라는 철학을 바탕으로 만들어졌다.
그리고, 이러한 철학을 바탕으로 리액트 팀은 리액트의 기능을 계속해서 발전시켜왔다.
이런 배경을 먼저 언급하는 이후는, 이런 철학에서 개발된 기능이 바로 Hooks
이기 때문이다.
내가 생각하는 훅
나는 훅을 "리액트 기능을 활용할 수 있는 함수"라고 생각한다.
리액트 기능을 사용하기에 몇가지 제약이 있고, Lint 등의 사용 때문에 use
접두사를 붙여야하는 컨벤션이 존재하지만, 그럼에도 결국 리액트 차원에서의 함수라고 생각한다.
그렇기에 함수로 코드를 분리했을 때의 장점을 일부 공유한다.
훅(Hooks)의 어원
"함수라고 표현하면 되는거 아닌가요? 훅이라고 표현한 데에는 이유가 있지 않을까요?"
전문가로서 용어를 명확하게 하는 것은 중요하다고 생각한다.
그리고, 리액트 팀은 훅을 "Hooks"라고 표현하고 있다.
그 이유는 무엇일까?
Hooks are functions that let you “hook into” React state and lifecycle features from function components.
리액트 공식 문서에서는 위와 같이 이야기하고 있다.
Hook은 함수 컴포넌트에서 React 상태 및 생명주기 기능을 "연결"할 수 있는 함수입니다.
즉, 갈고리를 걸다. 라는 의미에서 "Hooks"라는 용어를 사용하고 있는 것이다.

훅이 해결하고자 하는 문제
말이 와닿지 않을 수 있는데, 훅이 어떤 문제를 해결하고자 했는지 살펴보면 도움이 될 것이라 생각한다.
리액트 훅은 클래스형에서 함수형으로 리액트 작성의 페러다임이 넘어가는 과도기에 등장했다.
기존의 클래스 문법에서는 리액트 생명주기와 관련된 다음의 기능을 갖고 있었다.

리액트 컴포넌트와 관련해서 보다 세밀하게 상태에 개입할 수 있다는 장점이 있지만, 이러한 장점은 동시에 단점이 되기도 했다.
- 컴포넌트 사이에서 상태 로직을 재사용하기 어렵다.
- 복잡한 컴포넌트들은 이해하기 어렵다.