LIFO
는 Last In First Out
의 약자인데요. 마지막에 넣은 요소가 먼저 나간다는 의미로, 위는 뚤려있고 아래는 막혀있는 통에 위에서 아래로 요소들을 순차적으로 적재하는 모습을 생각하시면 되는데요.
반면 FIFO
는 First In First Out
의 약자로, 먼저 넣은 요소가 먼저 나간다는 의미로, 양 옆이 뚤려있는 통에 왼쪽에서 오른쪽으로 순차적으로 요소를 순차적으로 적재한다고 생각하시면 편합니다.
앞서 소개해드린 LIFO와 FIFO를 구현한 컬렉션이 자바에 존재하는데요. LIFO
를 구현한 컬렉션은 '쌓인다' 라는 의미로 stack 컬렉션
이라 불리고, FIFO
를 구현한 컬렉션은 '줄을 서다' 라는 의미로 queue 컬렉션
이라고 불립니다.
stack 컬렉션
은 기본적으로 두 가지 메서드인 push
, pop
이 존재하며, push는 앞에서부터 순차적으로 적재
를 하고, pop은 가장 마지막에 집어 넣은 요소를 추출
하는 메서드입니다.
queue 컬렉션
또한 두 가지 메서드인 offer
와 poll
이 존재합니다. offer는 push와 마찬가지로 순서대로 적재를 하는데, poll은 pop과는 다르게 먼저 적재된 요소를 추출하는 메서드입니다.
// Stack 사용 예시 import java.util.Stack; public class Main { public static void main(String[] args) { // Stack 생성 Stack<String> stack = new Stack<>(); // 데이터 추가 (push) stack.push("A"); stack.push("B"); stack.push("C"); // 데이터 추출 (pop) - 최근에 추가된 데이터부터 추출됨 while (!stack.isEmpty()) { System.out.println(stack.pop()); } } } // queue 사용 예시 import java.util.LinkedList; import java.util.Queue; public class Main { public static void main(String[] args) { // Queue 생성 Queue<String> queue = new LinkedList<>(); // 데이터 추가 (offer) queue.offer("A"); queue.offer("B"); queue.offer("C"); // 데이터 추출 (poll) - 먼저 추가된 데이터부터 추출됨 while (!queue.isEmpty()) { System.out.println(queue.poll()); } } }
참고로 자바스크립트에서도 stack (push, pop)와 queue(shift, unshift) 구현이 가능합니다.