17.5 LIFO와 FIFO (Stack & Queue)


1. 프링글스 통 vs 버스 줄 서기 🚌

데이터가 들어오고 나가는 순서가 중요한 경우가 있습니다. 대표적으로 StackQueue가 있습니다.

Stack Queue Comparison

1) Stack (LIFO: Last In First Out)

  • 비유: “프링글스 통”
  • 특징: 나중에 넣은 감자칩이 제일 위에 있어서, 나중에 넣은 걸 가장 먼저 먹습니다.
  • 사용처: 뒤로 가기 버튼 (가장 최근에 본 페이지로 돌아감), 메소드 호출 스택.

2) Queue (FIFO: First In First Out)

  • 비유: “버스 정류장 줄 서기”
  • 특징: 먼저 줄 선 사람이 가장 먼저 버스를 탑니다.
  • 사용처: 프린터 대기열 (먼저 인쇄 누른 거 먼저 출력), 메시지 큐.



2. Stack 사용법 (Push / Pop)

자바에서는 Stack 클래스를 제공합니다.

Stack<Coin> coinBox = new Stack<>();

// 1. 넣기 (push)
coinBox.push(new Coin(100)); // 1번
coinBox.push(new Coin(500)); // 2번 (제일 위)

// 2. 꺼내기 (pop)
Coin coin = coinBox.pop(); // 500원 (나중에 넣은 게 먼저 나옴)

// 3. 훔쳐보기 (peek)
// 꺼내지는 않고 제일 위에 뭐 있는지만 확인
Coin top = coinBox.peek(); 



3. Queue 사용법 (Offer / Poll)

자바에서 Queue는 인터페이스이고, 구현체로 주로 LinkedList를 사용합니다.

Queue<Message> messageQueue = new LinkedList<>();

// 1. 넣기 (offer)
messageQueue.offer(new Message("홍길동")); // 1번
messageQueue.offer(new Message("이순신")); // 2번

// 2. 꺼내기 (poll)
Message msg = messageQueue.poll(); // "홍길동" (먼저 넣은 게 먼저 나옴)

핵심 요약

  • Stack: “후입선출” (나중에 온 놈이 대장)
  • Queue: “선입선출” (먼저 온 사람이 임자)
서브목차