분명 잔 것 같은데 졸리다

LIFO(Stack)과 FIFO(Queue) 본문

BE/JAVA

LIFO(Stack)과 FIFO(Queue)

スモモ🍒 2024. 6. 25. 17:33

 

1) LIFO (Last In First Out)

- 후입선출, 나중에 넣은 객체가 먼저 빠져나가는 구조

- 컬렉션 프레임워크에서 LIFO 자료구조를 제공하는 Stack 인터페이스를 제공함

- 대표적인 예 : JVM 스텍 메모리

 

※ push() : 데이터 넣기 ,  pop() : 데이터 빼기

public static void main(String[] args) {
		Stack<Coin> coinBox = new Stack<Coin>();
		
		// 동전 넣기
		coinBox.push(new Coin(100));
		coinBox.push(new Coin(50));
		coinBox.push(new Coin(500));
		coinBox.push(new Coin(10));
		
		// 동전 하나씩 꺼내기
		while (!coinBox.isEmpty()) {	// 비어 있지 않다면 반복
			Coin coin = coinBox.pop();
			System.out.println("꺼내온 동전 : " + coin.getValue() + "원");
			
			/*
			=== 마지막에 push한 값부터 출력됨 ===
			꺼내온 동전 : 10원
			꺼내온 동전 : 500원
			꺼내온 동전 : 50원
			꺼내온 동전 : 100원
			 */
			
		}

 

 

2) FIFO (First In First Out)

- 선입선출, 먼저 넣은 객체가 먼저 빠져나가는 구조

- 컬렉션 프레임워크에서 FIFO 자료구조를 제공하는 Queue 인터페이스를 제공함

- 대표적인 클래스 : LinkedList

- 대표적인 예 : ThreadPool

 

※ offer() : 데이터 넣기 ,  poll() : 데이터 빼기

public static void main(String[] args) {
		// Queue 생성
		// offer : 데이터 넣기, poll : 데이터 빼기
		Queue<Message> messageQueue = new LinkedList<>();

		messageQueue.offer(new Message("sendMail", "홍길동"));
		messageQueue.offer(new Message("sendSMS", "황"));
		messageQueue.offer(new Message("sendKakao", "감"));

		while (!messageQueue.isEmpty()) {
			Message message = messageQueue.poll();
			switch (message.command) {
			case "sendMail": {
				System.out.println(message.to + "님에게 메일을 보냅니다.");
				break;
			}
			case "sendSMS": {
				System.out.println(message.to + "님에게 메일을 보냅니다.");
				break;
			}
			case "sendKakao": {
				System.out.println(message.to + "님에게 메일을 보냅니다.");
				break;
			}
			
			/*
			=== 선입선출, 먼저 offer한 값이 먼저 나옴 ===
			홍길동님에게 메일을 보냅니다.
			황님에게 메일을 보냅니다.
			감님에게 메일을 보냅니다.
			 */
			}

		}

	}