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) 구현이 가능합니다.