-
JAVA Enum(열거 타입) 값 비교하기language/JAVA 2021. 1. 22. 21:30반응형
지금 다니는 회사에 입사해서 가장 처음 받게 된 코드리뷰에서 지적당한 것이 열거 타입을 비교하는 부분 이었습니다.
public enum Size { SMALL, MEDIUM, LARGE, EXTRA_LARGE }
저는 위와 같이 enum 으로 선언된 열거 타입의 변수들을 선언하고 다음과 같이 비교했습니다.
public String getMessage(Size first, Size second) { if (first.equals(second)) { return "It's same size."; } return "It's not same size."; }
하지만 한 팀원 분께서 enum은 equals 메서드를 쓸 필요가 없다고 하셨습니다. 열거 타입은 인스턴스들이 고정되어 있으므로 간단하게 ==을 사용하면 됩니다. equals 를 실행한다고 해도 결국 == 검사를 수행하게 됩니다. 게다가 == 비교를 하는 편이 코드도 간단해지고 직관적이기 때문에 저희 팀의 컨벤션은 equals 메서드가 아니라 == 을 사용하는 것이었습니다.
public String getMessage(Size first, Size second) { if (first == second) { return "It's same size."; } return "It's not same size."; }
추가 적으로 toString 메서드도 구현할 필요가 없다. 열거 객체의 이름 주는 toString 메서드가 자동으로 만들어지기 때문입니다. 그리고 toString의 반대 역할을 하는 valueOf 메서드도 있다는 것을 기억해 두면 좋겠습니다. 그리고 존재하긴 하지만 사용하는 것을 조심해야 하는 메서드로 ordinal 이 있습니다.
반응형'language > JAVA' 카테고리의 다른 글
[이펙티브 자바] 생성자 대신 정적 팩터리 메서드를 고려하라 (0) 2021.01.28 Stream, generate(), limit(), distinct(), sorted() (0) 2021.01.24 자바(JAVA)에서 배열(Arrays), 리스트(List) 정렬하기 (0) 2021.01.22 JAVA 인터페이스(Interface) 다중상속 시 메서드 충돌 해결하기 (1) 2021.01.22 Optional<T> (0) 2020.05.07