17장 Enum

1. 상수(Constant)

  • 값이 바뀌지 않는 변수로 자바에서 static final예약어를 사용하여 정적 메모리에 올려두고 재사용한다.

  • 저장하고 있는 값에 대한 의미를 부여하기 위해 사용한다.

    • ex) Calendar.YEAR, Calendar.MONTH

  • 상수값들은 하나의 약속이자 규칙으로써 사용된다.

    • EX) Calendar.YEAR ⇒ 실제로는 정수값 1을 보관.

    • Calendar클래스 내부에서 정수 1은 "년도"의 의미로 사용하겠다고 약속한 것.

    • Calendar클래스 내부에서 정수 2은 ""의 의미로 사용하겠다고 약속한 것

상수의 단점

  • 의미가 없는 숫자로 상수를 관리

    • Calendar클래스 내부에서 정수 1은 "년도"의 의미로 사용하겠다고 약속한 것이나, 1은 사실 어떤 의미도 없는 숫자 1임.

    • 상수를 여러개 선언한다고 할 때, 유지보수에 불리함.(각 정수가 어떤 값을 지닌지 다 알고 있어야함)

  • 값에 대한 검증불가

    • Calendar.YEAR값은 결국 int자료형 이기 때문에, 내가 올바른 년도형식의 상수값을 넣었는지 검증이 불가능함.

    • 즉 , 잘못된 값을 넣어도 컴파일 에러를 발생시켜 주지 않음.

  • 상수마다 고유메서드 사용 불가

  • 비슷한 의미의 값들을 하나의 상수로 묶어서 관리할 수 없음.

    • 1, true, "true"등의 값을 하나의 변수로 관리 불가.

상수의 단점을 보완한 코딩방식

  • 상수의 단점인 값에 대한 검증이나, 메서드를 사용하기 위하여 정수값이 아닌 객체 단위로 상수를 만드는 방법이 고안되었음.

  • 객체단위 상수관리 코드 예시)

public class CarColor {
    public static final CarColor BLACK = new CarColor();
    public static final CarColor RED = new CarColor();
    public static final CarColor WHITE = new CarColor();

    private CarColor() {
        System.out.println("객체생성..");
    }
    
    public void method(){
        System.out.println("메서드");
    }
    
}
  • 위 방법을 통해, 상수값에 대한 검증이 컴파일 단계에서 가능해졌으며, 메서드를 추가할 수 있고, 단순한 정수값이 아닌 의미를 가진 객체를 값으로써 관리할 수 있게 되었음.

  • 단, 위 코드는 반복적인 코드가 많이 등장하고, 불필요하게 길어질 수 도있는데, 반복적인 코드작성을 줄이고 간단하게 구현가능하도록 기능으로 추가한게 Enum임

2. Enum(Enumeration)

  • Java5에 추가된 기능으로 의미있는 상수 객체 집합열거(Enumeration)하는 클래스를 의미한다.

  • 즉, 상수객체를 관리하기 편하도록 만들어진 클래스

  • 기본적인 기능은 객체단위 상수관리와 동일하나 더 사용하기 간편하도록 단축문법 존재한다.

  • enum만의 추가적인 기능으로 enum내부의 상수객체들을 배열로 반환해주는 values()메서드가 존재한다.

  • values()메서드를 활용하면, 반복문을 통해 내가 원하는 상수값을 찾는 메서드를 만들 수 있다.

  • enum 코드 예시 )

public enum CarColor {
    BLACK(0), RED(1), WHITE(2);

    private final int color;

    CarColor(int color) {
        this.color= color;
    }

    public int getColor() {
        return color;
    }
}
  • 코드를 더욱 짧고 명확하게 만들기 위해서는 enum을 통해 관리하는게 좋다.

Last updated