Stack
LIFO(Last In First Out) 구조를 가지고 있으면 후입선출 방식이다. 가장 최근에 유입된 데이터를 먼저 꺼내서 처리하는 방식이다. 스택의 크기는 정해져 있고, 스택에 데이터를 저장하는 액션을 Push라 지칭 하고 가장 최근에 저장한 데이터를 꺼내오는 액션을 Pop이라고 한다.
만약 스택 크기보다 더 많은 데이터를 저장하면 Overflow 에러가 발생하게 되며, 아무런 데이터가 없는 경우에도 데이터를 꺼내는 액션(Pop)을 수행하면 오류가 떨어진다.
Queue
FIFO(First In First Out) 구조를 가지고 있으면 선입선출 방식이다. 제일 먼저 유입된 데이터를 먼저 처리하는 방식이다.
구조는
Enqueue: 큐 맨 뒤(rear)에서 요소를 추가하는 연산을 말한다.
Dequeue: 큐 맨 앞(front)에서 요소를 꺼내오는 연산을 말한다.
front: 큐의 맨 앞의 위치(인덱스)
Peek: front에 위치한 요소를 읽는 연산을 말한다. 스택과 비교한다면 pop과 동일한 연산이다.
rear: 큐의 맨 뒤의 위치(인덱스)
Heap
Heap은 완전 이진트리의 일종으로 우선순위 큐를 위하여 만들어진 자료구조이다. 여러 개의 값들 중에서 최댓 값이나 최솟 값을 빠르게 찾아내도록 만들어진 자료구조이다.
List ⇒ Linked List ⇒ Array List
배열과 동일한 연속된 데이터를 저장할 수 있는 구조. 배열과 다른 점은 요소를 저장할 수 있는 크기가 유한하지 않다.
연결 리스트는 ‘노드'라는 객체로 이루어져 있다. Data를 저장할 공간과 다음 Data가 저장되어 있는 주소를 담고 있다. 새로운 DATA가 저장되면 앞서 저장되어 있던 노드에 새롭게 추가된 데이터가 저장된 메모리 주소가 저장된다.
자바의 경우, Array 타입의 배열은 길이가 고정되어 있다. 그렇기 때문에 데이터를 추가하기 위해서는 길이가 더 큰 Arrray 타입의 배열을 만들어서 그곳에 다시 옮겨야 한다.
HashMap ⇒ Map
과제
Restful API
Representational State Transfer의 약자. 자원을 이름(자원의 표현)으로 구분하여 해당 자원의 상태를 주고 받는 모든 것을 의미한다.
HTTP URI를 통해서 자원(Resource)을 명시하고, HTTP Method를 통해 해당 자원에 대한 CRUD Operation을 적용하는 것을 말한다.
Resource(DB의 데이터)가 있고 HTTP Method와 URI를 통해 Resource를 처리하도록 설계된 아키텍처를 의미한다.
비동기 프로그래밍
비동기 프로그래밍의 구현이 매우 쉽다. 여기서 비동기 프로그래밍이란, 어떠한 요청을 보내고 그 요청에 대한 응답이 올 때까지 기다리는 것이 아니라, 그 다음 로직을 수행하고 있다가 요청에 응답이 오면 그때 응답에 대한 처리를 수행하는 방식을 비동기 프로그맹이라고 한다. 이러한 방식을 사용한다면 스레드를 매우 효율적으로 사용할 수 있다.
일상 생활로 예를 들면, 스타벅스에서 커피를 받는 방법과 유사합니다. 첫번째, 우리는 커피를 주문하죠. 그리고 아무것도 하지않고 커피만 바라보고 기다리면 그것은 동기방식이고, 그렇지 않고 두번째 핸드폰 켜서 뉴스를 보거나, 전화를 하거나, 또는 함께 온 사람과 대화를 하거나 등등 다른 일을 한다면 이것은 비동기 방식이죠. 커피가 준비가 다 되면 바리스타가 우리를 부릅니다.
Network(TCP/UDP)
TCP와 UDP의 차이점
TCP는 연결형 서비스로 가상 회선 방식을 제공하고, 높은 신뢰성을 보장하고 흐름을 제어 및 혼잡 제어 기능을 제공한다.
UDP는 비연결형 서비스로 데이터그램 방식을 제공하고, 패킷 순서 부여나 재조립등의 기능을 처리하지 않기 때문에 연속이 중요한 서비스에 사된다.
TCP 3 Way-Handshake
TCP는 장치들 사이에 논리적인 접속을 성립(establish)하기 위하여 3-way handshake를 사용한다.
과정
숙제
필수 내용: 간략한 정의에 대한 정리 + 적용(내가 공부한 것으로 기반으로 실생활이나, 실제 코딩에 적용해보는 것)하는 부분까지 기술블로그에 작성하시고, 과제 제출 스레드에 올려주세요.