Stack과 Queue

Stack은 LIFO(Last in first out) Queue는 FIFO(First in first out)으로 되어있다.

Stack의 메서드

메서드 설명
boolean empty( ) Stack 이 비어있는지 알려줌
Object peek( ) Stack 의 맨 위에 저장된 객체를 반환pop( ) 과 달리 Stack 에서 객체를 꺼내지 않음(비었을 때는 EmptyStackException 발생)
Object pop( ) Stack 의 맨 위에 저장된 객체를 꺼냄(비었을 때는 EmptyStackException 발생)
Object push(Object item) Stack 에 객체( item )를 저장
int search(Object o) Stack 에서 주어진 객체( o )를 찾아서 그 위치를 반환, 못 찾으면 -1 을 반환(배열과 달리 위치가 1부터 시작)

Queue의 메서드

메서드 설 명
boolean add(Object o) 지정된 객체를 Queue 에 추가 성공하면 true를 반환, 저장공간이 부족하면 IllegalStateException 발생
Object remove( ) Queue 에서 객체를 꺼내 반환. 비어있으면 NoSuchElementException 발생
Object element( ) 삭제없이 요소를 읽어옴 peek 와 달리 Queue 가 비었을때 NoSuchElementException 발생
boolean offer(Object o) Queue 에 객체를 저장 성공하면 true, 실패하면 false를 반환
Object poll( ) Queue 에서 객체를 꺼내서 반환. 비어있으면 null을 반환
Object peek( ) 삭제없이 요소를 읽어온다. Queue가 비어있으면 null을 반환
예제
package Example;

import java.util.*;

public class Example {
    public static void main(String[] args) {
        Stack st = new Stack();
        Queue q = new LinkedList();    //Queue의 인터페이스 구현체인 LinkedList를 사용
        
        st.push("0");
        st.push("1");
        st.push("2");
        
        q.offer("0");
        q.offer("1");
        q.offer("2");
        
        System.out.println("=== Stack ===");
        while(!st.isEmpty()) {
            System.out.println(st.pop());
        }
        
        System.out.println("=== Queue ===");
        while(!q.isEmpty()) {
            System.out.println(q.poll());
        }
    }
}

결과값

===Stack===
2
1
0
===Queue===
0
1
2

자베에서는 스택을 Stack클래스로 구현하여 제공하지만 큐는 Queue인터페이스만 있고 별도의 클래스가 없다. 그래서 Queue인터페이스를 구현한 클래스들을 사용해야 한다.

Comment and share

메모리(RAM)

프로그램이 실행하게 되면 OS는 메모리(RAM)에 공간을 할당해 준다.
할당해주는 메모리 공간은 4가지(Code, Data, Stack, Heap)가 있다.

코드(Code) 영역

우리가 작성한 소스코드가 들어가는 부분.
즉, 실행할 프로그램의 코드가 저장되는 영역으로 텍스트영역이라고도 부른다.
코그영역은 실행 파일을 구성하는 명령어들이 올라가는 메모리 영역으로 함수, 제어문, 상수 등이 여기에 저장된다.

데이터(Data) 영역

전역변수와 Static변수가 할당되는 영역
프로그램의 시작과 동시에 할당되고, 프로그램이 종료되어야 메모리가 소멸되는 영역.

스택(Stack) 영역

프로그램이 자동으로 사용하는 임시 메모리 영역.
함수 호출 시 생성되는 지역 변수와 매개변수가 저장되는 영역이고,
함수 호출이 완료되면 사라진다.

힙(Heap) 영역

프로그래머가 할당/해체하는 메모리 공간이다.
Java에서는 가비지 컬렉터가 자동으로 해제한다.
이 공간에 메모리 할당하는 것을 동적 할당이라고도 부른다.

Heap과 Stack영역은 같은 공간을 공유한다. 그래서 Heap이 메모리 위쪽 주소부터 할당되고 Stack은 아래쪽 부터 할당된다. 각 영역이 상대 공간을 침범하는 일이 발생할 수 있는데 이를 각각 Heap Overflow, Stack Overflow라고 칭한다.

Comment and share

  • page 1 of 1

Hyeon Soo Ahn

author.bio


author.job