과제를 수행하던 중 문득 궁금해졌다.
.name()은 ENUM에 기본적으로 포함되어있는 메서드인가?
클릭해보니 .name()은 ENUM에 포함된 메서드라는 것을 확인할 수 있었다.
찾아보니 .name()외에도 생각보다 다양한 메서드가 있어서 이번 기회에 쭉 정리해보았다.
ENUM의 기본제공 메서드
values( )
▪️enum에 정의된 모든 상수를 배열로 반환한다.
▪️예시⬇️
public enum UserRole {
ADMIN, USER
}
public static void main(String[] args) {
for (UserRole role : UserRole.values()) {
System.out.println(role);
}
}
valueOf(String str)
▪️문자열로 전달받은 값과 정확히 일치하는 enum 상수를 반환한다.
▪️대소문자를 구분
▪️일치하는 값이 존재하지 않을 경우: IllegalArgumentException 발생
▪️예시⬇️
UserRole role = UserRole.valueOf("ADMIN");
System.out.println(role); // 결과: ADMIN
name( )
▪️enum 상수를 문자열로 반환한다.
▪️예시⬇️
UserRole role = UserRole.ADMIN;
System.out.println(role.name()); // 결과: ADMIN
toString( )
▪️enum 상수를 문자열로 반환한다.
▪️name()과 달리, 오버라이드하여 사용자의 필요에 따른 커스터마이징 가능
▪️ 예시⬇️
UserRole role = UserRole.ADMIN;
System.out.println(role.toString()); // 결과: ADMIN
▪️오버라이드 예시⬇️
public enum UserRole {
ADMIN,
USER;
@Override
public String toString() {
if (this == ADMIN) {
return "관리자";
} else {
return "일반 회원";
}
}
}
public class Main {
public static void main(String[] args) {
System.out.println(UserRole.ADMIN);
System.out.println(UserRole.USER);
}
}
출력 결과⬇️
관리자
일반 회원
ordinal( )
▪️enum 선언 순서를 반환한다. (0부터 시작)
▪️ordinal( )은 가급적으면 사용하지 말자!
public enum UserRole {
ADMIN, USER
}
위와 같이 enum을 만들었다.
그리고 DB에서 관리자와 회원을 구분하기 위해 ordinal( )로 값을 불러와서 사용했다고하자.
ADMIN의 ordinal( ) 값인 0을 DB에 저장해서 사용했는데, 갑자기 누군가 USER와 ADMIN의 순서를 바꾼다면?
DB에 저장된 숫자 값은 그대로 유지되지만, 애플리케이션 상에서 USER는 0이되고, ADMIN은 1이 되어버린다.
즉, 순식간에 관리자와 회원이 뒤바뀌는 오류가 일어난다!
▪️ 예시⬇️
public enum UserRole {
ADMIN, USER
}
public static void main(String[] args) {
UserRole role = UserRole.USER;
System.out.println(role.ordinal()); // 결과: 1
}
compareTo(Enum other)
▪️같은 enum 타입 내에서 두 상수를 비교한다.
▪️정의된 순서를 기준으로 비교, 음수, 0, 양수 반환
▪️ 예시⬇️
UserRole role1 = UserRole.ADMIN;
UserRole role2 = UserRole.USER;
System.out.println(role1.compareTo(role2)); // 결과: -1 (ADMIN이 USER보다 앞에 있음)
equals(Object obj)
▪️ 두 enum 값이 동일한지 확인하고 boolean 값을 반환한다.
▪️ 예시⬇️
UserRole role1 = UserRole.ADMIN;
UserRole role2 = UserRole.ADMIN;
System.out.println(role1.equals(role2)); // 결과: true
hashCode( )
▪️ enum 상수의 고유한 해시코드를 반환한다.
▪️ 예시⬇️
UserRole role = UserRole.ADMIN;
System.out.println(role.hashCode()); // 해시코드 출력
정리
Method | 설명 | 대소문자 구분 |
values( ) | 모든 enum 값을 배열로 반환 | - |
valuesOf(String) | 문자열 이름과 정확히 일치하는 상수 반환 | O |
name( ) | enum 상수 문자열로 반환 | - |
toString( ) | enum 상수 문자열로 변환, 커스터마이징 가능 | - |
ordinal( ) | 정의된 순서 반환 (0부터 시작) | - |
compareTo( ) | 두 상수를 순서 기준으로 비교 | - |
equals( ) | 두 값이 동일한지 비교 | - |
hashCode( ) | 상수의 고유한 해시코드 반환 | - |
'TIL > JAVA' 카테고리의 다른 글
[TIL] DI(의존성 주입)와 IoC(제어의 역전) (0) | 2024.11.29 |
---|---|
[TIL] Stream을 사용하는 이유, 특징 (1) | 2024.11.28 |
[TIL] 람다식 (with. 익명 클래스, 익명 함수) (0) | 2024.11.27 |
[TIL] Comparator와 Comparable (0) | 2024.11.25 |
[TIL] 생긴게 똑같으면 같은거 아닌가요?🤔 (동일성 vs 동등성) (1) | 2024.11.21 |