스택은 데이터를 순서대로 쌓은 자료구조이다. 원통에 구슬을 넣는 것과 같다. 입력과 출력의 방향이 하나여서 스택의 최상단에서만 이루어지는 제한적 접근이 있다. 먼저 들어간 데이터는 제일 나중에 나오는 후입선출 구조로 라스트인 퍼스트 아웃, 퍼스트 인 라스트 아웃이라고 한다. stack에 데이터를 넣는 것을 푸쉬, 꺼내는 것을 팝이라고 한다. 스택 구조상 특정 데이터를 조회할 수 없고 최상단에서만 저장하고 꺼낼수 있다. 그렇기에 데이터를 저장하고 검색하는 프로세스가 매우 빠르다. 하나씩 빼고 하나씩 넣어야한다. 앞으로 가기/ 뒤로가기에서 사용된다.
큐는 자동차가 톨게이트를 지나가는 것과 같다. 먼저 들어간 데이터가 제일 처음에 나오는 구조로 퍼스트 인 퍼스트 아웃의 특징을 가지고 있다. 입력은 맨 끝인 테일에서 출력은 맨 앞인 헤드에서 이루어진다. 데이터를 넣는 것을 인큐, 꺼내는 것을 디큐라고 한다. 데이터가 입력된 순서대로 처리할때 주로 사용된다. 각 처리마다 한개의 데이터를 넣고 뺄 수 있다. 컴퓨터 장치들 사이에서 데이터를 주고 받을때 임시 기억 장치의 자료구조로 큐를 사용한다.
스택과 큐의 차이점은 데이터 구조, 동작 방식, 사용사례에서 나타납니다.
스택은 라스트 인 퍼스트 아웃의 구조로 마지막에 삽입 된 데이터가 제일 먼저 나오는 구조입니다, 반면에 큐는 퍼스트 인 퍼스트 아웃의 구조로 제일 먼저 삽입된 데이터가 제일 먼저 삭제 됩니다. 또 스택은 입력 출력 방향이 같습니다. 따라서 한쪽 끝에서 입출력이 모두 진행되며 이를 푸쉬와 팝이라고 합니다. 큐는 입출력 방향이 다릅니다. 입력은 맨 끝인 테일에서 이루어지고 출력은 맨 앞인 헤드에서 이루어집니다. 이를 인큐와 디큐라 합니다. 마지막으로 사용 사례입니다. 우리 주변에서 스택이 사용되는 대표적인 사례는 브라우저의 앞으로 가기와 뒤로가기가 있습니다. 이에 비해 큐는 컴퓨터 장치들 사이에서 데이터를 주고 받을 때 임시 기억 장치의 자료구조로 사용됩니다
Hook은 함수 컴포넌트에서 사용하는 메서드
함수 컴포넌트 이전 컴포넌트가 클래스 컴포넌트
클래스 컴포넌트는 복잡해질수록 이해하기 어렵고 컴포넌트 사이에 상태 로직을 재사용하기 어렵다는 단점과 this 키워드가 어떤 방식으로 동작하는지에 대해 정확히 알지 못하면 동작 방식 자체를 정확히 이해하기 어렵다!
함수 컴포넌트는 상태 값을 사용하거나 최적화 할 수 있는 기능들이 미진했는데 이를 보완하기위한 것이 훅이라는 개념이다. 훨씬 더 직관적이고 보기 쉽다는 특징이 있고 상태 값을 저장하고 사용하기 위해 usestate을 사용하는데 이것이 훅이다.
함수 컴포넌트와 클래스 컴포넌트가 하는 역활은 동일합니다. 하지만!
첫번째, 가독성의 차이입니다. 클래스 컴포넌트는 복잡해질수록 이해하기 어려우나 함수 컴포넌트는 훨씬 더 직관적이고 보기 쉽다는 특징을 가집니다. 실제로 버튼 클릭시 카운팅해주는 기능을 가진 간단한 함수여도 클래스 컴포넌트는 약 26줄을 코딩해야하는 반면, 함수 컴포넌트는 약 16줄이면 기능을 구현할 수 있습니다.
두번째, 상태값에 대한 처리 메소드 입니다. 클래스 컴포넌트는 this 키워드를 이용하여 state이라는 객체에 상태를 저장하고 변경합니다. 이 방법은 this 문법을 정확히 알지 못하면 동작 방식 자체를 이해하기 어렵습니다. 반면에 함수 컴포넌트는 hook이라는 메서드를 사용합니다. hook의 다양한 메서드중 usestate을 이용하여 상태값을 관리 합니다.
클래스 컴포넌트보다 함수 컴포넌트가 사용하기에 더 쉽기 때문에 현재에는 함수 컴포넌트를 더 많이 사용하고 있습니다.