Hook은 React 16.8버전부터 추가된 기능이다. 기존 Class 컴포넌트의 문제점들을 개선하여 Functional 컴포넌트에서 React의 여러 기능들을 더 간단하고 편리하게 사용할 수 있게 되었다.
기존의 Classical React에 대표적으로 다음과 같은 불편한 점들이 있었다.
    This Binding 때문에 코드가 불필요하게 장황해지고 있다.
  
      똑같은 데이터를 모든 라이프 사이클 메서드에 불러와야 한다. 
        Dependency와 return을 활용하여 라이프 사이클 메서드를 보다 고차 컴포넌트 (HOC) : 리액트 컴포넌트(ReactComponent)를 인자로 받아 새로운 리액트 컴포넌트(EnhancedReactComponent)를 반환하는 함수
Render Props : props 에 JSX 를 렌더링하는 함수를 전달. render 함수에서, 전달받은 함수에 넣어주고 싶은 값을 함수의 인자로 전달하여 사용.
    재사용 로직을 구현하다가 Wrapper Hell이 발생하기도 한다.
  
: useState는 state를 함수 컴포넌트 안에서 사용할 수 있게 해준다. state 변수와 해당 변수를 갱신할 수 있는 함수 이 두 가지 쌍을 반환한다. 클래스 컴포넌트의 this.state.count와 this.setState와 유사하다.
  
: useEffect Hook을 이용하여 react가 컴포넌트 렌더링 이후 동작을 명령할 수 있다. react는 이 Hook 안의 함수를 기억했다가(함수 = effect) DOM 업데이트를 수행한 이후에 불러낸다.
  
useEffect 정리
: useEffect의 두 번째 인자 ( dependencies )에 따라 ComponentDidMount, ComponentWillUnmount, ComponentDidUpdate의 역할을 할 수 있다.1. useEffect ( function ) -> dependencies가 아예 없으므로, ComponentDidMount ( 컴포넌트가 마운트 됐을 때 마다 ), ComponentWillUnmount ( 컴포넌트가 언마운트 될 때 마다 ), ComponentDidUpdate ( 컴포넌트가 업데이트 됐을 때 마다 ), function이 실행된다2. useEffect ( function, [] ) -> dependencies가 비었으므로, ComponentDidMount에만 function이 실행된다.3. useEffect ( function, [ number ] -> dependencies가 number이므로, number라는 state가 마운트 되거나 변할 때 마다 (ComponentDidMount, ComponentDidUpdate) function이 실행된다.4. useEffect ( () => function, []) -> useEffect에서 첫 번째 인자의 함수가 다른 함수를 리턴한다면 ComponentWillUnMount시 호출된다. * []가 없으면 1번과 동일.
이외에 React 내장 함수로는 다음과 같은 함수들이 있다.
참고자료
Hook의 개요 - React 공식문서
React Hooks (1) Hook의 등장 배경 - youthfulhps
React Hooks에 대하여 - jinsk9268