13_03_Queue_Stack

안녕하세요 MrChooCAI 입니다~

이번 포스트에서는 Collection 중 하나인 queue stack에 대해서 알아보도록 하겠습니다. 지금까지 다양한 collection 자료구조(set, list)에 대해서 알아 보았습니다. 또 다른 형태의 자료 구조를 가지고 있는 queuestack에 대해서 알아보겠습니다. 이번 collection은 어떤 특징을 가지고 있을 까요? 이런 궁금증을 가지고 시작 하도록 하겠습니다. 마지막에는 이런 collection종류가 필요한 이유를 적어 두었습니다. 확인 하시면 도움 되실 것 입니다.

[설명 순서]

1.     Queue

2.     Stack

실습 코드는 github을 통해서 전달 드리도록 하겠습니다.

Github: https://github.com/Chooyoungjun/javastudy/tree/main/14_03_queue_stack

 

Queue

1.     Queue?

한 쪽 끝에서는 삽입이 다른 쪽 끝에서는 삭제가 일어나는 구조!

[특징]

Queue인터페이스입니다. 그래서 upcasting을 활용해서 정의가 필요합니다.

선입 선출(FIFO:First In First Out)의 구조를 자고지고 있습니다.


위의 Snapshot과 같이 먼저 들어온 값이 먼저 나가는 구조를 가지고 있는 것을 알 수 있습니다.

2.     Queue 메서드


3.     Queue 사용법

Queue<Element> q = new LinkedList<Element>();

Queue<Element> q = new Array<Element>();

위와 같이 upcasting해서 구현하여야 합니다. 그리고 여기에서 ElementGeneric에서 나오는 문법입니다. 잘 모르시면 generic을 한번도 확인해 주시면 되겠습니다.

4.     실습

간단하게 queue를 만들어서 데이터를 추가하고 그리고 제거해 보는 작업을 해보도록 하겠습니다.


위의 실습에서 확인 할 수 있듯이 queueupcasting을 활용해서 객체를 만듭니다. 그리고 값을 add해 보고 remove해 보았습니다. 이렇게 실습해본 결과 처음 들어간 데이터를 처음으로 빼는 것을 알 수 있었습니다. 이렇게 queue에 대해서 간단하게 알아 보았습니다.

Stack

1.     Stack ?

한 방향으로만 삽입과 삭제가 모두 일어나는 구조 입니다.

Stack이라는 의미가 쌓다라는 의미이죠? 그렇기 때문에 쌓은 것을 꺼낼 때는 위에서 부터 꺼낼 수밖에 없습니다. 그래서 출입구가 하나인 자료 구조를 Stack이라고 합니다.

[특징]

늦게 입력된 값이 먼저 출력되는 특징이 있습니다. (LIFO:Last In First Out)

시작 인덱스가 1부터 시작하는 특징이 있습니다. (실습에서 자세히 확인 하겠습니다.)

Vector의 자식 클래스입니다.


위의 그림과 같이 입구가 하나가 있기 때문에 마지막에 입력 되었던 값이 첫번째로 출력되는 것을 확인 할 수 있습니다.

2.     Stack 관련 메서드


위의 메서드와 같이 추가 및 제거는 top에서만 실행 되는 메서드를 제공 하는 것을 알 수 있습니다. 위에서의 내용을 좀 더 자세하게 이해하기 위해서 실습을 진행해 보도록 하겠습니다.

3.     실습

간단하게 Generic을 활용해서 형식을 지정하여 stack을 만들고 데이터를 입력 및 출력 하는 실습을 진행해 보겠습니다.


위의 실습 코드와 같이 stack에 데이터를 입력하고 출력 하는 것을 해 보았습니다. 마지막에 search 메서드를 활용해서 찾을 단어가 몇 번째 위치에 있는지 반환해 보았습니다. 보시면 apple은 첫번째에 있는 데이터 인데 반환되는 숫자가 0이 아니라 1인 것을 확인 할 수 있습니다.

자 이렇게 해서 이번 포스트 에서는 queuestack에 대해서 알아보았습니다. 이런 자료구조를 왜 배울까요? 사실 범용적인 자료구조로 stackqueue를 구현 해서 사용 할 수도 있죠? 그런데 왜 이렇게 특화된 collection클래스를 만들까요? 이유는 상황에 따라서 극한의 성능을 요구 될 경우가 있기 때문 입니다. 특히 요즘 IoT가 많이 발달된 상황에서 데이터의 전송은 초당 1~5만건은 기본적으로 일어 납니다. 이럴 경우 복잡한 collection을 사용하면 느려서 처리하는 것이 불가능 합니다. 그래서 이런 경우에 단순한 기능만 있는 collection을 활용해서 빠르게 많은 데이터를 처리 할 수 있게 되는 것 입니다. 감사합니다~

Comments