[Java 기초] 큐(Queue)

이진영·2023년 6월 13일
0

JAVA 기초

목록 보기
4/9

Queue


큐는 대표적인 선입선출(FIFO : First In First Out) 자료구조를 뜻한다.
즉 먼저 들어온 데이터가 먼저 나가는 구조

하지만 나는 이러한 선입 선출 자료구조를 먼저 들어온 데이터가 먼저 나가는 구조를 좀 더 그림을 통해 설명하고자 한다.

만약에 1부터(First In) 5까지의 데이터를 처리한다고 Queue라는 자료구조에 넣는다고 가정했을 때 위 그림과 같은 구조를 가진다. enqueue가 입구라고 가정했을때 입구에서 부터 차례대로 값을 넣는다. 그렇다면 값을 다시 가져올 때는 일반적으로 pop()이라는 메소드를 사용하게 될 것이다. 해당 메소드를 통해서 1의 데이텅 즉 제일 먼저 들어온 데이터가 나오게 된다.(First Out)

이러한 Queue라는 자료구조를 학습하면서 어떻게 보면 아르바이트를 해봤다면 좀 와닿는 말이 있을 수 있다. 바로 선입선출 이 단어만으로는 잘 와닿지 않을 수 있다...ㅋㅋㅋ

그렇다면 이러한 말을 유통기한에 적용해보자!! 일상생활에는 많은 제품들이 있고, 이러한 제품들은 유통기한이 항상 명시되어 있다. 그렇기에 유통기한을 중요시하기 때문에 나는 어떻게 보면 항상 아르바이트는 선입선출 속에 있었다고 볼 수 있다는 생각이 들었다.ㅋㅋㅋ 그런 와중에 해당 자료구조를 유통기한과 접목시키니 한방에 이해가 갔다!! (깊이는 아니에요!)

그렇다면 더 쓰이는 곳은?

  • 웹 브라우저 방문기록(뒤로 가기) : 가장 나중에 열린 페이지부터 다시 보여준다.
  • 역순 문자열 만들기 : 가장 나중에 입력된 문자부터 출력한다.
  • 실행 취소(undo) : 가장 나중에 실행된 것부터 실행을 취소한다.
  • 후위 표기법 계산
  • 수식의 괄호 검사

의 기타적인 사항이 있다.


많은 분들이 정말 세부적으로 설명을 잘 해놓은 글들이 정말 많다. 그렇기에 설명에 대한 부분은 이렇게 까지만 하고 바로 본론으로 넘어갈려고 한다.

큐 선언!!

Queue<Integer> queue = new Queue<>();
아마도 대부분 java라는 프로그래밍 언어를 만져봤다면 보통은 생성자를 불러와서 만들 때 이렇게 만들 것이다.

하지만 큰 오산이다!!

일반적으로 Stack과 같이 선언을 해주면 될 줄 알았지만, 오류가 뜬다.

그 이유는 바로 Queue 자체는 Interface 형태이기 때문이다. 인터페이스가 무엇인가. 우리 개발자가 직접 오버 주행 해서 재정의해 줘야 한다.

그렇기에 우리는 Queue를 사용할 때 new LinkedList로 재정의해서 사용해서 주면 된다.

주요 메소드

Queue<Integer> queue = new LinkedList<>();

for (int i = 0; i < 10; i++) {
    queue.offer(i); // 값을 넣기 메소드
    System.out.println("offer First In : " + i);
}

while (!queue.isEmpty()) {
    System.out.println("peek 메소드 : " + queue.peek());
    System.out.println("poll First Out : " + queue.poll());
}

간단하게 해당 메소드들을 살펴 보자면!
Offer 메소드는 우리가 값을 넣는 행위! return 타입은 Boolean이다.

Peek 메소드는 값을 꺼내오기는 하지만 우리가 Queue라는 자료구조에 영향을 끼치지 않는다. 하지만 여기서 반환 타입이 없다면 Null을 내뱉는다.

poll 또한 직감을 하셨겠지만 이러한 메소드는 값을 꺼내는 행위이다. 만약 값이 없다면 null을 반환한다.

이렇게 간단하게 주요 개념을 알고 그에 해당 하는 메소드들을 살펴 봤다. 부디 내 머리에 이러한 내용만큼은 박히길 바란다.!!

profile
내가 공부한 것들을 적는 공간

0개의 댓글