Java Stack 에서 empty() vs isEmpty()

박영준·2023년 5월 23일
1

IT 지식

목록 보기
5/14

1. 의문점

empty() 와 isEmpty() 는 생긴 형태부터 다르지만, 많은 블로그에서는 이를 혼동하여 사용하고 있었다.

2. 의견

여러 블로그를 찾아봤을 때 대략 4가지 의견으로 나눌 수 있었다.

의견 1 : 두 메소드는 다른 역할을 한다.

empty() : Stack 을 초기화
isEmpty() : Stack 이 비어있는지 확인

의견 2 : 하나의 메소드만 존재한다 1

empty() : Stack 이 비어있는지 확인. 비어 있다면 true, 없으면 false 를 반환
isEmpty() : 애초에 없는 메소드로 간주

의견 3 : 하나의 메소드만 존재한다 2

empty() : 애초에 없는 메소드로 간주
isEmpty() : Stack 이 비어있는지 확인. 비어 있다면 true, 없으면 false 를 반환

의견 4 : 두 메소드는 동일하다.

empty() == isEmpty()

3. 해결

JDK 1.0 을 사용할 당시
Java에는 '컬렉션(Collection) 프레임워크'가 없었다.
Stack, Vector, HashTable 는 Java에서 제공하는 기본 데이터 구조 중 일부였다.

이후 JDK 1.2 에서
컬렉션(Collection) 프레임워크가 JDK에 추가되었고, 표준 인터페이스(List: , Map 등...)가 도입되었다.

그러나 새로운 표준 컬렉션 인터페이스에서는 메서드 이름이 다른 규칙으로 지정되었다.
명명 규칙의 변경은 JDK 1.2에도 도입된 Java Bean 표준의 영향을 가장 많이 받았을 것으로 짐작된다.
이렇게 명명 규칙이 변경되었으나, 동시에 이전 버전과의 호환성을 위해 이전에 사용하던 방법을 유지했다.

결론적으로 보면
empty() 와 isEmpty() 는 동일한 기능을 하는 메서드라고 볼 수 있다.

추가 의견
어떤 개발자의 의견을 추가한다.

프레임워크의 Deque가 Stack 보다 더 나은 대안이다.
Stack 또는 Vector 등... 이 더 이상 사용되지 않는 이유는 이전 코드가 실행되지 않도록 유지되는 레거시 API로 간주되기 때문이다.
이렇게 레거시 코드로 간주되기 때문에, 이전 메서드(empty())는 더 이상 사용되지 않는 것으로 표시해야 한다.
(레거시 코드 : 더 이상 쓰기 힘들고 정상적이지 않는 화나게 만드는 난해한 코드)

결론적으로
empty() 보다는 isEmpty() 를 사용하는 것을 권장한다.


참고: empty() vs isEmpty() in Java Stack class

profile
개발자로 거듭나기!

0개의 댓글