자바
[Java] 큐(Queue) add()와 offer()의 차이점
생각없는 개발자
2025. 2. 12. 14:30
Java에서 Queue 인터페이스의 add()와 offer() 메서드는 모두 큐에 요소를 추가하는 기능을 합니다. 하지만 두 메서드의 동작 방식에는 중요한 차이점이 있습니다.
1. add(E e)
- add()는 요소를 큐의 끝에 추가합니다.
- 큐의 용량이 제한되어 있고, 큐가 가득 차 있을 경우 예외(IllegalStateException)를 발생시킵니다.
- 추가에 성공하면 true를 반환합니다.
- NullPointerException이 발생할 수 있습니다.
Queue<Integer> queue = new LinkedList<>();
queue.add(1); // 성공
queue.add(2); // 성공
System.out.println(queue); // [1, 2]
2. offer(E e)
- 요소를 큐의 끝에 추가합니다.
- 큐가 가득 차 있으면 false를 반환하며, 예외를 발생시키지 않습니다.
- 추가에 성공하면 true를 반환합니다.
Queue<Integer> queue = new ArrayBlockingQueue<>(2); // 크기가 2인 제한된 큐
queue.offer(1); // 성공, 반환값: true
queue.offer(2); // 성공, 반환값: true
boolean result = queue.offer(3); // 실패, 반환값: false
System.out.println(queue); // [1, 2]
System.out.println("추가 성공 여부: " + result); // false
각각 어떤 경우에 사용할까?
- 예외 처리를 원하지 않고 실패 시 단순히 처리하고 싶다면 -> offer()
- 큐가 항상 추가를 허용하는 상황 or 실패 시 예외로 처리하고 싶다면 -> add()