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"등의 값을 하나의 변수로 관리 불가.
상수의 단점을 보완한 코딩방식
상수의 단점인 값에 대한 검증이나, 메서드를 사용하기 위하여 정수값이 아닌 객체 단위로 상수를 만드는 방법이 고안되었음.
객체단위 상수관리 코드 예시)
위 방법을 통해, 상수값에 대한 검증이 컴파일 단계에서 가능해졌으며, 메서드를 추가할 수 있고, 단순한 정수값이 아닌 의미를 가진 객체를 값으로써 관리할 수 있게 되었음.
단, 위 코드는 반복적인 코드가 많이 등장하고, 불필요하게 길어질 수 도있는데, 반복적인 코드작성을 줄이고 간단하게 구현가능하도록 기능으로 추가한게 Enum임
2. Enum(Enumeration)
Java5에 추가된 기능으로 의미있는 상수 객체 집합을 열거(Enumeration)하는 클래스를 의미한다.
즉, 상수객체를 관리하기 편하도록 만들어진 클래스
기본적인 기능은 객체단위 상수관리와 동일하나 더 사용하기 간편하도록 단축문법이 존재한다.
enum만의 추가적인 기능으로 enum내부의 상수객체들을 배열로 반환해주는
values()
메서드가 존재한다.values()메서드를 활용하면, 반복문을 통해 내가 원하는 상수값을 찾는 메서드를 만들 수 있다.
enum 코드 예시 )
코드를 더욱 짧고 명확하게 만들기 위해서는 enum을 통해 관리하는게 좋다.
Last updated