개발 공부/자바 기본기

Java Stack, Thread

엽승 2024. 5. 14. 13:32
728x90

Stack:  쌓다라는 의미를 내포하고있다. 즉 상자에 물건을 쌓아 올리듯이 데이터를 쌓는 자료 구조  이다.

LIFO(Last In First Out)  구조를 가지고 있다. 마지막에 넣은 것이 가장 먼저 빠져나온다. 

Queue(큐)는 선입 선출 (FIFO) 형태를 가지고 있다.  두 구조가 양대산맥처럼 사용한다.

 

마지막으로 사용이 끝난 지역변수를 바로바로 쳐내버리는 Stack은 매우 효율적으로 메모리를 사용한다. 

프로그래밍 메모리 영역에 쓰여진다

스택은 Thread Safe한데, 어떤 공유 자원에 여러 쓰레드가 동시에 접근해도, 프로그램 실행에 문제가 없는 상태이다.

정보처리기사에서도 나오는 내용이다.

 

Thread란 ? 

프로세스 내에서 실제로 작업을 수행하는 주체 모든 프로세스에는 한 개 이상의 스레드가 존재 작업 수행한다. 

두 개 이상의 스레드를 가지는 멀티스레드 프로세스라고한다. 

 

- Mutual exclusion( 상호 배제) :

 공유 자원에 하나의 쓰레드만 접근 일반적으로 많이 사용되는 방식

 

- Atomic operation (원자 연산): 

 공유 자원 변경에 필요한 연산을 원자적으로 분리하고 데이터 변경이 이뤄지는 시점에 Lock을 건다 그 동안 다른 쓰레드의 접근이 불가능하다. 

- Thread-local storage(쓰레드 지역 저장소) 

 공유 자원의 사용을 최대한 줄이고, 쓰레드에서만 접근 가능한 저장소들을 사용함으로써 동시성을 제어한다. 

 

- Re-entranch (재진입성)

 호출과 상관없이 프로그램에 문제가 없도록 작성

 

자바에선 java.util.Stack클래스를 통해 동작을 제공한다.

 

package LV0;


import java.util.Stack;
public class StackStudy {
    public static void main(String[] args) {
        Stack<Number> stack=new Stack<>();
        stack.push(1);
        stack.push(2);
        stack.push(3);
        System.out.println(stack);

        System.out.println(stack.pop());
        //LIFO 형식이다보니 가장 마지막에 들어간 3이빠져나간다.

        System.out.println(stack.peek());
        //가장 마지막 값 확인하고 제거하지는 않는다.
        if(!stack.empty()){
            stack.pop();
        }
        //스택이 비어있는지 확인
    }


}

 

 

728x90

'개발 공부 > 자바 기본기' 카테고리의 다른 글

NEXT _ STEP 사다리 미션에 앞서 공부하는 정팩메..  (0) 2024.05.30
Stream, map, collect 알고쓰자.  (0) 2024.05.20
스트림 Streams  (0) 2024.05.14
Chapter2 14-15  (1) 2024.01.16
Part 2 - 7 8 9 10  (0) 2024.01.07