📝느낀 점
아마, 나처럼 지금까지 공부한 사람들은 enum에 대해 알기는 알지만, 잘 사용하지도 않고, 적절하게 사용하는
곳도 자세히 몰라서 쓰지도 않는 그런 느낌이 들거라고 생각든다. (아니면 죄송합니다..)
하지만, 지금의 나는 좀 탈출하지 않았나 싶다. 우테코 프리코스 과정을 진행하면서 매번 과제를 하며 느낀 것이지만
이럴때 enum을 사용하는구나 하며 많이 알게된 것 같다. 그렇기에 enum은 열거형이라고 불리며, 서로 연관된
상수들의 집합을 의미한다. 그리고 컴파일 타임에 타입 안정성을 보장하며 연관된 상수들을 한곳에서만 관리하면 되기
때문에 관리하기 편했던 경험이들이 있다.
enum도 하나의 객체고, 하나의 클래스이다.
enum도 인스턴스이다.
그리고 JVM에서 유일하게 하나만 존재하는 것이다.
간단하게 정의하면 이렇다.
- 클래스처럼 보이게 하는 상수
- 서로 관련있는 상수들끼리 모아 상수들을 정의하는 것
- enum 클래스 형을 기반으로 한 클래스형 선언
enum 사용 이유는?
- enum은 컴파일 타임에 타입 안정성을 보장합니다.
- 특정 범위의 값만 사용 가능하므로 컴파일 오류나 런타임 예외를 줄입니다.
- 가독성이 좋다
- enum은 값들이 명시적으로 정의되어 있기 때문에 코드를 읽을 때 쉽게 이해할 수 있습니다.
- enum은 관리가 용이하다
- 값이 추가되거나 변경되는 경우, 한 곳에서만 변경하면 되기 때문에 코드의 유지 보수가 용이합니다.
- 성능
- enum은 컴파일 타임에 정적인 값으로 변환되기 때문에,
- 오버헤드 : 어떤 처리를 하기 위해 들어가는 간접적인 처리 시간 및 메모리
- 실행 시간에서 상수 검색의 “오버헤드”를 줄입니다.
- enum은 컴파일 타임에 정적인 값으로 변환되기 때문에,
인스턴스가 JVM 내에 하나만 존재한다는 것이 보장 되므로,
Java에서 싱글톤을 만드는 가장 좋은 방법으로 권장됩니다.
두가지 같은 것이다.
예제1)
public enum EEE {
EXCEPTION(-1),
DRAW(0),
POBI_WIN(1),
CRONG_WIN(2);
private final int value;
EEE(int value) {
this.value = value;
}
public int getValue() {
return value;
}
}
public class dddd {
public static void main(String[] args) {
System.out.println("이넘값 뭐야: " + EEE.EXCEPTION); // 이넘값 뭐야: EXCEPTION
System.out.println("겟값뭐야: " + EEE.EXCEPTION.getValue()); // 겟값뭐야: -1
}
}
예제2)
public enum MonthEnum {
JAN(1),
FEB(2),
MAR(3),
APR(4),
MAY(5),
JUN(6),
JUL(7),
AUG(8),
SEP(9),
OCT(10),
NOV(11),
DEC(12);
private int numOfMonth;
MonthEnum(int numOfMonth) {
this.numOfMonth = numOfMonth;
}
public int getNumOfMonth() {
return numOfMonth;
}
}
public class MonthClass {
public static void main(String[] args) {
// JAN 입력 받음
MonthEnum month = MonthEnum.JAN;
System.out.println(month + ": " + MonthEnum.JAN.getNumOfMonth() + "월 입니다.");
}
}
출력) JAN: 1월 입니다.
예제3)
public enum MonthEnum {
JAN(1, "January"),
FEB(2, "February"),
MAR(3, "March"),
APR(4, "April"),
MAY(5, "May"),
JUN(6, "June"),
JUL(7, "July"),
AUG(8, "August"),
SEP(9, "September"),
OCT(10, "October"),
NOV(11, "November"),
DEC(12, "December");
private int numOfMonth;
private String fullNameOfMonth;
MonthEnum(int numOfMonth, String fullNameOfMonth) {
this.numOfMonth = numOfMonth;
this.fullNameOfMonth = fullNameOfMonth;
}
public int getNumOfMonth() {
return numOfMonth;
}
public String getFullNameOfMonth() {
return fullNameOfMonth;
}
}
public class MonthClass {
public static void main(String[] args) {
// JAN 입력 받음
MonthEnum month = MonthEnum.JAN;
System.out.println(month + ": '" + MonthEnum.JAN.getFullNameOfMonth() + "' 입니다.");
}
}
출력) JAN: 'January' 입니다.
enum에는 values() 가 있다.
public enum itemType {
BOOK("도서"), FOOD("음식"), ETC("기타");
private final String description;
itemType(String description) {
this.description = description;
}
public String getDescription() {
return description;
}
}
itemTypes 를 등록 폼, 조회, 수정 폼에서 모두 사용하므로
@ModelAttribute의 특별한 사용법을 적용하자. 이렇게 사용할 수 있다.
@ModelAttribute("itemTypes")
public ItemType[] itemTypes() {
return ItemType.values(); // [BOOK, FOOD, ETC]
}
ItemType.values() 를 사용하면 해당 enum의 모든 정보를 배열로 반환한다.
→ [BOOK, FOOD, ETC]
'Java' 카테고리의 다른 글
equals, hashCode 메서드는 왜 사용하나요? (0) | 2023.11.07 |
---|---|
static에 대해 설명 / static을 사용하는 이유는? (0) | 2023.11.07 |
제네릭이 필요한 이유는 무엇인가요? (0) | 2023.11.06 |
박싱(boxing), 언박싱(un-boxing) (0) | 2023.11.06 |
추상클래스와 인터페이스의 용도를 나눈 이유는 무엇인가요? (0) | 2023.11.06 |