본문 바로가기

개발

[Java] Queue에서 poll()과 remove() 중 무엇을 선택해야 할까?

 


 

Java에서 Queue를 사용할 때, 가장 앞 요소를 가져오는 메소드는 poll()remove() 두 가지가 있다.

 

Queue가 빈 상태일때, 두 메소드의 차이를 볼 수 있다.

 

poll()은 null을 반환하고 remove()은 NoSuchElement Error 반환한다.

 

어떤 상황에서 어떤 선택을 해야할지 고민이 됐다.

 

null로 인해 발생되는 NPE은 예방하는 것이 중요하다고 본 것이 기억났기 때문이다.

 

이에 대한 힌트를 stackoverflow에서 얻었다.

 

 

Queue가 비어있을 것으로 예상되는 경우에는 poll()을 사용하는 것이 적절하고

 

그 반대의 경우에는 remove()를 사용하는 것이 적절하다고 한다.

 

예외처리가 많은 비용을 요구하기 때문이다.

 

 

Queue가 종종 빈다는 사실을 개발자가 알고 있다면, 예외처리 대신, 다른 방식으로 구현하는 것이 더 바람직하다.

 

그러나 Queue가 비는 것을 생각하지 않는 경우에는 예외처리를 수행한다면, code flow를 방해하는 null 검사 등의 코드를 작성하지 않아도 되기 때문에 더 효과적이다.

 

 

그래서 NPE를 피하기 위한 poll() 사용법을 생각해보았다.

 

int val에 queue.poll()의 정수가 있으면 그 값을 없으면 -1을 넣는 코드이다.

 

 

첫번째 방법은 Optional class로 한 번 감싸 null의 존재를 없앤 방식이다.

 

두번째 방법은 레퍼런스 타입인 Integer에 poll()을 담은 후 if문으로 처리한 경우이다.

 

세번째 방법은 queue.isEmpty()와 if문으로 처리한 경우이다.

 

 

// #1
int val = Optional.ofNullable(queue.poll()).orElse(-1);

// #2
Integer val = queue.poll();
val = (val == null) ? -1 : val

// #3
if (queue.isEmpty()) {
	val = -1;
} else {
	val = queue.poll();
}

 

 

https://stackoverflow.com/questions/2193450/why-java-provides-two-methods-to-remove-element-from-queue/2193740

 

Why Java provides two methods to remove element from Queue?

The Queue implementation in Java has two methods to remove element, One is remove() which throws exception and other one is poll() which returns null for an empty queue. I have two doubts: Why Que...

stackoverflow.com

 

https://m.blog.naver.com/lestat85/220217676199

 

[Java] null 에 관한 9 가지 사실

이 글은 아래 링크를 의역한 것입니다. 원본 링크 : http://javarevisited.blogspot.kr/2014/12/9-things-a...

blog.naver.com