📚 오늘 공부한 내용 - 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<>();
💡 실무에서의 스택 활용
언제 스택을 사용할까?
- 함수 호출 관리 (Call Stack)
- 브라우저 뒤로가기 기능
- 수식 계산 (후위 표기법)
- 괄호 검사 알고리즘
- DFS(깊이 우선 탐색) 구현
스택의 특징
- 삽입/삭제: O(1) - 매우 빠름
- 접근: 최상단 요소만 접근 가능
- 메모리: 연속적인 메모리 사용
🎯 오늘의 핵심 포인트
- LIFO 원칙: 마지막에 들어간 것이 먼저 나온다
- 주요 연산: push(넣기), pop(빼기), peek(조회)
- Java Stack 클래스 지양: 대신 Deque 사용
- 실무 활용: 함수 호출, 뒤로가기, 괄호 검사 등
🔄 다음 학습 계획
- 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 |