일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 객체지향 프로그래밍 5가지 원칙
- 안드로이드 디자인패턴
- edittext 연결
- 아파치 엔진엑스
- java
- java thread 예제
- recyclerview item recycle
- apache nginx
- 안드로이드 스튜디오 인터넷 연결 안되어 있을 때
- 안드로이드 스튜디오 커스텀 다이얼로그
- 디자인 패턴 예제
- hilt error
- apache란
- 안드로이드 스튜디오 custom dialog
- dagger error
- 안드로이드 스튜디오 인터넷 연결 확인
- 안드로이드 스튜디오 tts
- 리사이클러뷰 아이템 재사용
- savedinstancestate
- 다른 객체 리스트의 비교
- AAC
- 아파치란
- Thread
- LifeCycle
- 이중for문 사용 안하기
- 안드로이드 스튜디오 반복되는 레이아웃 코드
- Kotlin
- 안드로이드 스튜디오 style
- 변수
- 자바 스레드 예제
- Today
- Total
Sam Story
JAVA - Stack 본문
오늘은 Stack에 대해 간단히 포스팅 해보려 한다.
알고리즘 , 자료구조 하면 자주 보게되는것중에 하나인게 바로 Stack 이라고 생각한다.
Stack 이란 ?
Stack의 사전적 정의는 '쌓다' , '더미' 로서 뭔가 쌓아놓은 것을 말한다.
뭔가를 쌓아 올리듯이 데이터를 쌓는 자료구조라고 할 수 있다.
Stack은 한 쪽 끝에서만 자료를 넣거나 뺄 수 있는 선형 및 후입 선출 구조로 되어 있다.
자료를 넣는것을 push 라고 하고 반대로 넣어둔 자료를 꺼내는 것을 pop 이라고 하는데
이 때 마지막에 push한 값이 먼저 나오게 된다.
아래 그림을 통해 간단히 보게 되면
데이터를 push하게 되면 Stack top에 들어가게 되고
pop 하게 되면 가장 마지막에 들어간 데이터가 나오게 된다.
코딩테스트를 많이 해본 사람들이라면
java.util.Stack 클래스를 통해 Stack을 import해서 많이 사용해 봤을 것이다.
Stack class 에서는 기본으로 제공되는 메서드들이 몇가지 있는데
대표적인것을 알아보자.
Object push(Object item) : Stack에 객체(item)를 저장한다.
Object pop() : Stack의 맨위에 저장된 객체를 꺼내는 메서드
Object peek() : Stack의 맨 위에 저장된 객체를 반환하는 메서드
boolean empty() : Stack이 비어있다면 true return
int search(Object o) : Stack에서 주어진 객체를 찾아서 그위치를 반환, 못 찾을 경우 -1반환
(배열과 달리 위치는 0이 아닌 1부터 시작)
간단한 예제를 통해 어떻게 동작하는지 알아보자.
예제
Stack 초기화, push()
import java.util.Stack;
public class Main {
public static void main(String[] args) {
// Stack 초기화 <> 안에 자료형
Stack<String> stack = new Stack<>();
// push -> 데이터를 Stack에 쌓는다.
stack.push("A");
stack.push("B");
stack.push("C");
System.out.println(stack);
}
}
실행결과
pop()
import java.util.Stack;
public class Main {
public static void main(String[] args) {
// Stack 초기화 <> 안에 자료형
Stack<String> stack = new Stack<>();
// push -> 데이터를 Stack에 쌓는다.
stack.push("A");
stack.push("B");
stack.push("C");
stack.push("D");
// pop -> 데이터를 Stack에서 꺼낸다
// 가장 마지막에 push한 데이터인 D가 출력됨.
System.out.println(stack.pop());
System.out.println(stack);
}
}
실행결과
peek()
import java.util.Stack;
public class Main {
public static void main(String[] args) {
// Stack 초기화 <> 안에 자료형
Stack<String> stack = new Stack<>();
// push -> 데이터를 Stack에 쌓는다.
stack.push("A");
stack.push("B");
stack.push("C");
stack.push("D");
// peek -> Stack 최상단 데이터를 불러온다.
// 가장 마지막에 쌓은 데이터인 D를 불러옴.
System.out.println(stack.peek());
System.out.println(stack);
}
}
실행결과
empty()
import java.util.Stack;
public class Main {
public static void main(String[] args) {
// Stack 초기화 <> 안에 자료형
Stack<String> stack = new Stack<>();
// push -> 데이터를 Stack에 쌓는다.
stack.push("A");
// stack이 비어있지 않다면 안전하게 pop 해준다.
if(!stack.empty()) {
stack.pop();
}
System.out.println(stack);
}
}
실행결과
search()
import java.util.Stack;
public class Main {
public static void main(String[] args) {
// Stack 초기화 <> 안에 자료형
Stack<String> stack = new Stack<>();
// push -> 데이터를 Stack에 쌓는다.
stack.push("A");
stack.push("B");
stack.push("C");
stack.push("D");
// search -> 몇번 째로 꺼내는지에 대한 인덱스 값을 반환한다.
System.out.println(stack.search("B"));
System.out.println(stack.search("D"));
}
}
실행결과
위 예제들을 통해서 Stack의 간단한 사용법에 대해 알아보았다.
이러한 Stack은 수식계산 , 수식 괄호 검사 등의 구현에 사용되기도 한다.
사실 Stack 보다는 List , ArrayList를 많이 사용했었지만
이러한 Stack은 마지막으로 사용이 끝난 지역변수를 바로바로 쳐내버리기 때문에
효율적으로 메모리를 사용할 수 있다는 장점이 있다.
'JAVA' 카테고리의 다른 글
Java - Stream (0) | 2025.03.14 |
---|---|
Java - JVM 메모리 구조 , Stack, Heap (1) | 2024.12.04 |
JAVA - 인터페이스 (2) | 2024.11.22 |
JAVA - 추상클래스 (0) | 2024.11.21 |
JAVA - 의존 역전 원칙 (2) | 2024.10.20 |