[자료구조] Stack(스택) VS Queue(큐)

이수보🧑🏻‍💻·2022년 2월 1일
0

기타

목록 보기
2/12
post-thumbnail
  • 자료구조

Stack(스택) VS Queue(큐)를 설명하기에 앞서 자료구조에 대해 먼저 설명하도록 하겠습니다.

데이터 구조라고도 하며 일반적으로 데이터의 저장 방식또는 저장 공간이라고도 합니다.
즉, 자료(데이터)의 집합을 의미하며 자료들이 논리적으로 정의된 규칙에 의거하여 나열되며 자료에 대한 처리를 효율적으로 수행할 수 있도록 자료를 구분하여 표현한 것이라고 생각하시면 됩니다.


  • 자료구조 왜 쓸까?

목적은 간단합니다. 바로 위에서도 설명드렸다싶이 자료를 더욱 효율적으로 관리하고, 저장하기 위해 사용합니다.
또한 자료구조를 잘 사용한다면, 우리의 개발시간 단축 또는 실행시간 단축과 더불어 메모리 용량의 절약을 도출할 수 있습니다.

그렇다면 자료구조를 사용하는 장점을 3가지로 요약할 수 있습니다.

  1. 효율성 증가
    • 정해진 규칙에 의해 정렬된 자료를 효율적으로 사용할 수 있습니다.

  2. 추상화
    • 복잡한 자료들 속에서 핵심적인 자료만 간추려 데이터를 사용 및 보관할 수 있다.

  3. 재사용성
    • 처음 자료를 보관할 때 자료구조를 좋게 설계한다면 같은 자료를 재사용 및 범용적으로 사용할 수 있습니다.

위에서 설명한 것이 무슨 말인가 하실 수 있습니다.

하지만 우리는 자기도 모르게 자료구조를 사용하여 저장하고 저장된 자료를 이용하고 있었습니다.

그 예가 바로 배열(Array)입니다.
배열은 가장 기본적인 자료구조로 생성 시 셀의 수가 고정되고 각 셀에는 인덱스 번호가 부여되며 인덱스를 통해 자료에 접근할 수 있습니다.


이처럼 우리는 자료구조를 자주 사용해 왔습니다.
우리는 그 중에서도 Stack(스텍) Queue(큐)를 살펴보려고 합니다.


  • Stack(스텍 VS Queue(큐)

1. Stack(스텍)

스택을 먼저 설명하는 이유로는 일상생활을 하면서 자주 사용하고 들어봤기 때문입니다.
LOL을 하셨던 분이라면 모두 아실겁니다. 메자이 풀스텍이 얼마나 무서운지...
3스텍 -> 6스텍, 점차 메자이가 쌓여가는 걸 보면 두려움에 서렌 생각이 절로 납니다.
이처럼 스텍은 쌓인다는 의미입니다.

이미지로 한 번 살펴보겠습니다.

스텍을 검색하면 흔히 나오는 그림자료입니다.

스텍 자료구조는 LIFO라고도 부릅니다.
Last-In-First-Out의 약자로 가장 나중에 들어간 자료가 먼저 나온다는 뜻입니다.

사진처럼 아래부분이 막혀있기 때문에 자료1을 꺼내기 위해서는 가장 나중에 넣은 자료2 를 먼저 꺼내야 합니다.

이러한 자료구조 덕분에 스텍(Stack)은 보통 브라우저의 뒤로가기, Ctrl + z 에 주로 사용됩니다.

스텍의 장점

  • 구조가 단순하여 구현이 쉽다.
  • 데이터 저장/읽기 속도가 빠르다.
  • 데이터를 받는 순서대로 정렬한다.

스텍의 단점

  • 가장 나중에 들어간 자료만 가져올 수 있다.
  • 한 번에 하나의 데이터만 처리 가능하다
  • 저장공간의 낭비가 발생할 수 있다.

스텍의 사용

1. 선언
   Stack<String> stack = new Stack<>();

2. 데이터 삽입
   stack.push("데이터");

3. 데이터 꺼내기
   stack.pop();


2. Queue(큐)

큐는 줄을 서는 것을 뜻하는 영어 단어로 쉽게 외우기 위해 그냥 당구채(큐대)를 생각하시면 편합니다.
큐대의 모양을 보면 길쭉한 모양이 생각납니다.

이렇게 길쭉한 큐대의 앞 뒤가 모두 뚫려 있는 것이 Queue(큐)라고 생각하시면 됩니다.

앞 뒤가 뚫린 큐대에 자료를 넣으면 어떻게 될까를 이미지로 보겠습니다.

상상하셨던 그대로 가장 먼저 넣은 자료가 가장 먼저 나옵니다.

이러한 자료구조 덕분에 Queue큐 는 주로 음성데이터처럼 순서에 민감한 데이터를 처리하거나, 대기열처럼 무언가 기다린 후 가장 먼저 온 작업을 처리하는 때에 주로 사용합니다.

큐의 장점

  • 순서대로 처리 할 때에 유용하다.
  • 데이터 접근, 삽입, 삭제가 빠르다.

큐의 단점

  • 중간 데이터에 접근하지 못한다.
  • 한 번에 하나의 데이터만 처리 가능하다.
  • 삽입을 위해서는 계속하여 요소를 이동시켜야 한다.

큐의 사용

1. 선언
   Queue<String> queue = new LinkedList<>();

2. 데이터 삽입
   queue.offer("홍길동");

3. 데이터 꺼내기
   queue.poll();  -> 값을 삭제하며 출력
   queue.peek();  -> 값을 삭제 없이 출력

이상으로 Stack(스택) Queue(큐) 에 대한 설명을 마치겠습니다.

0개의 댓글