enum class에서 비교는 ==가 적합한가 equals()가 적합한지에 대해서 고민해 봤습니다.
자바의 enum class는 singleton이기 때문에, == 비교가 적합하다고 생각했습니다. (equals() 보다 속도도 빠릅니다)
왜냐하면 런타임 시점에서의 NPE 방지뿐만 아니라, 컴파일 시점에 타입 호환성까지 check해주는 장점이 있기 때문입니다. equals() 비교를 통해 값을 비교했다면 그대로 컴파일되었을 것이라고 판단됩니다.
enum의 class를 뜯어봤을 때, 결정적으로 == 비교를 하는 것을 확인할 수 있습니다. 즉, == 비교를 내부적으로 하고 있지만, 위의 장점들 뿐만 아니라 비교하려는 상수를 앞에 둬야 NPE를 방지할 수 있는 번거로움을 없애려면 == 비교가 적합하다고 생각합니다.
(null을 앞에 두고 상수와 비교하면 NPE가 발생하지만, 상수를 앞에 두고 null과 비교하면 NPE 발생)
위의 말은 다음과 같습니다.
// NullPointerException이 발생하지 않음
if (Color.BLACK.equals(nothing)) {
// 실행 코드
}
// NullPointerException이 발생함
if (nothing.equals(Color.BLACK)) {
// 실행 코드
}
enum Color { BLACK, WHITE };
Color nothing = null;
if (nothing == Color.BLACK); // runs fine
if (nothing.equals(Color.BLACK)); // throws NullPointerException
enum Color { BLACK, WHITE };
enum Chiral { LEFT, RIGHT };
if (Color.BLACK.equals(Chiral.LEFT)); // compiles fine
if (Color.BLACK == Chiral.LEFT); // DOESN'T COMPILE!!! Incompatible types!
[참고 자료]
https://johnmarc.tistory.com/152
'Java > Java Concept' 카테고리의 다른 글
[Java] Clean Code가 무엇이고 왜 사용해야 하는가 (2) | 2024.07.24 |
---|---|
[Java] inner class를 static으로 선언해야 하는 이유 (0) | 2024.05.16 |
[Java] HashMap, HashTable, ConcurrentHashMap 자료구조에 대해서 알아보자 (2) | 2024.01.22 |
[Java] EnumSet에 대해서 (1) | 2023.11.13 |
[Java] 객체지향 사실과 오해 1- 협력하는 객체들의 공동체 (0) | 2023.03.10 |