자바

[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()