TIL - Stack (09.21)
2025. 9. 23. 16:34

📚 오늘 공부한 내용 - Stack 자료구조

🎯 스택(Stack)이란?

스택은 LIFO(Last In First Out) 원칙을 따르는 자료구조입니다. 마치 아래쪽이 막힌 통에 블록을 쌓는 것과 같습니다.

📦 스택의 동작 원리

블록 넣기: 1 → 2 → 3
┌─────┐
│  3  │ ← 마지막에 들어간 것
├─────┤
│  2  │
├─────┤
│  1  │ ← 처음에 들어간 것
└─────┘

블록 빼기: 3 → 2 → 1

핵심: 넣는 곳과 빼는 곳이 동일하며, 가장 나중에 넣은 것이 가장 먼저 나옵니다.


🔧 스택의 주요 연산

기본 연산

  • push: 스택에 값을 넣는 연산
  • pop: 스택에서 값을 꺼내는 연산
  • peek: 다음에 꺼낼 요소를 확인 (꺼내지 않고 조회만)

코드 예시

Stack<Integer> stack = new Stack<>();

// push 연산
stack.push(1);
stack.push(2);
stack.push(3);
System.out.println(stack); // [1, 2, 3]

// peek 연산 - 조회만
System.out.println("다음 요소: " + stack.peek()); // 3

// pop 연산 - 꺼내기
System.out.println("꺼낸 요소: " + stack.pop()); // 3
System.out.println("꺼낸 요소: " + stack.pop()); // 2
System.out.println("꺼낸 요소: " + stack.pop()); // 1

⚠️ 중요한 주의사항

Java의 Stack 클래스는 사용하지 말자!

문제점:

  • 내부적으로 Vector 자료구조를 사용
  • Vector는 Java 1.0 시절의 레거시 코드
  • 성능이 좋지 않음
  • 현재는 하위 호환성을 위해서만 존재

대안:

// ❌ 사용하지 말 것
Stack<Integer> stack = new Stack<>();

// ✅ 대신 Deque 사용 권장
Deque<Integer> stack = new ArrayDeque<>();

💡 실무에서의 스택 활용

언제 스택을 사용할까?

  1. 함수 호출 관리 (Call Stack)
  2. 브라우저 뒤로가기 기능
  3. 수식 계산 (후위 표기법)
  4. 괄호 검사 알고리즘
  5. DFS(깊이 우선 탐색) 구현

스택의 특징

  • 삽입/삭제: O(1) - 매우 빠름
  • 접근: 최상단 요소만 접근 가능
  • 메모리: 연속적인 메모리 사용

🎯 오늘의 핵심 포인트

  1. LIFO 원칙: 마지막에 들어간 것이 먼저 나온다
  2. 주요 연산: push(넣기), pop(빼기), peek(조회)
  3. Java Stack 클래스 지양: 대신 Deque 사용
  4. 실무 활용: 함수 호출, 뒤로가기, 괄호 검사 등

🔄 다음 학습 계획

  • Queue 자료구조 학습 (FIFO 원칙)
  • Deque 자료구조 상세 학습
  • 스택 활용 알고리즘 문제 풀이

'🧑‍💻Sparta' 카테고리의 다른 글

TIL - Deque (09.23)  (0) 2025.09.23
TIL - Queue (09.22)  (0) 2025.09.23
TIL - Map (09.20)  (0) 2025.09.23
TIL - HashSet (09.19)  (0) 2025.09.23
TIL - Java Hash (09.18)  (0) 2025.09.23