JAVA 80%

LIFO/FIFO collection - Stack - Queue

lshjju 2025. 11. 6. 14:56

데이터를 보관함에 넣고 빼는 순서의 법칙인 **LIFO(후입선출)**와 FIFO(선입선출),

그리고 이를 구현한 Stack과 Queue



📘 LIFO와 FIFO: "누가 먼저 나가는가?"

데이터가 들어온 순서에 따라 나가는 순서가 정해지는 두 가지 방식입니다.

  1. LIFO (Last-In, First-Out): 마지막에 들어온 데이터가 가장 먼저 나가는 방식 (후입선출).
  2. FIFO (First-In, First-Out): 먼저 들어온 데이터가 가장 먼저 나가는 방식 (선입선출).

📦 핵심 컬렉션 도구

1. Stack (프링글스 통 / 쌓아둔 접시)

  • 특징: LIFO 방식을 따릅니다.
  • 설명: 한쪽 끝에서만 데이터를 넣고 뺄 수 있는 구조입니다. 맨 위에 쌓인 것부터 꺼내야 하므로 가장 나중에 넣은 데이터가 가장 먼저 나오게 됩니다.
  • 주요 메서드:
    • push(): 데이터를 맨 위에 쌓기
    • pop(): 맨 위의 데이터를 꺼내기 (삭제됨)
    • peek(): 맨 위의 데이터가 무엇인지 확인만 하기
Java
 
import java.util.Stack;

public class StackExample {
    public static void main(String[] args) {
        Stack<String> pringles = new Stack<>();
        
        // 데이터 넣기 (아래서부터 쌓임)
        pringles.push("어니언맛");
        pringles.push("치즈맛");
        pringles.push("오리지널맛"); // 마지막에 넣음
        
        System.out.println("현재 스택: " + pringles);
        
        // 데이터 꺼내기 (맨 위에서부터 나옴)
        String out = pringles.pop(); 
        System.out.println("꺼낸 과자: " + out); // 오리지널맛이 나옴
        System.out.println("남은 과자: " + pringles);
    }
}

2. Queue (줄 서기 / 터널)

  • 특징: FIFO 방식을 따릅니다.
  • 설명: 한쪽(뒤)에서는 넣고, 다른 쪽(앞)에서는 빼는 구조입니다. 먼저 줄을 선 데이터가 먼저 서비스를 받는 아주 공평한 방식입니다.
  • 주요 메서드:
    • offer(): 데이터를 뒤에 추가하기
    • poll(): 맨 앞의 데이터를 꺼내기 (삭제됨)
    • peek(): 맨 앞의 데이터 확인만 하기
Java
 
import java.util.LinkedList;
import java.util.Queue;

public class QueueExample {
    public static void main(String[] args) {
        // 자바에서 Queue는 인터페이스이며 주로 LinkedList로 구현합니다.
        Queue<String> line = new LinkedList<>();
        
        // 데이터 넣기 (줄 서기)
        line.offer("1번 손님");
        line.offer("2번 손님");
        line.offer("3번 손님");
        
        System.out.println("현재 대기줄: " + line);
        
        // 데이터 꺼내기 (먼저 온 순서대로)
        String first = line.poll();
        System.out.println("입장하신 분: " + first); // 1번 손님이 나옴
        System.out.println("남은 대기줄: " + line);
    }
}

👨‍🏫 실무 활용 사례

  • Stack(LIFO):
    • 웹 브라우저의 뒤로 가기: 가장 마지막에 방문한 페이지가 먼저 나옵니다.
    • 문서 작업의 되돌리기(Undo): 가장 최근에 한 작업부터 취소됩니다.
  • Queue(FIFO):
    • 프린터 출력 대기열: 먼저 인쇄 버튼을 누른 문서가 먼저 출력됩니다.
    • 은행 번호표: 먼저 번호표를 뽑은 사람부터 상담을 받습니다.

오늘의 요약

  • StackLIFO (나중에 온 녀석이 주인공).
  • QueueFIFO (먼저 온 녀석이 임자).
  • Stack은 단독 클래스로 존재하지만, Queue는 LinkedList 등을 통해 생성한다.

데이터의 흐름을 제어하는 가장 기본적이면서도 강력한 도구들을 마스터하셨습니다!


'JAVA 80%' 카테고리의 다른 글

Decorator Stream  (0) 2025.11.06
I/O Stream  (0) 2025.11.06
Collection framework  (0) 2025.11.05
Thread control  (0) 2025.11.05
java.util package  (0) 2025.11.05