-
Java 열거형(Enum)Java 2024. 2. 26. 16:41728x90반응형
열거형
서로 관련된 상수를 편하게 선언하기 위한 것, 상수를 정의 할 때 사용
C는 타입이 달라도 값이 같으면 조건식이 참이지만, 자바는 컴파일 에러다열거형 정의와 사용
enum 열거형이름 {상수명1, 상수명2, ...}
동서남북 4방향
enum Direction{EAST, SOUTH, WEST, NORTH}
사용법은 '열거형이름'.'상수명'
class Unit{ int x, y; Direction dir; void init(){ dir = Direction.EAST; } }
열거형 상수간 비교
'==' 사용 가능
equals()가 아닌 ==로 가능하다는 것은 그만큼 빠르다는 의미다.
하지만 <, >같은 비교연산자는 사용할 수 없고, compareTo()는 사용 가능하다.
비교 대상이 같으면 0, 왼쪽이 크면 양수, 오른쪽이 크면 음수 반환enum{ EAST(1), SOUTH(5), WEST(-1), NORTH(10); private final int value; Direction(int value){ this.value = value; } public int getValue(){ return value; } }
열거형의 인스턴스 변수는 반드시 final이어야 한다는 제약은 없지만, value는 열거형 상수의 값을 지정하기 위한 것이므로 붙였다
Direction d = new Direction(1); //에러
생성자를 만들어놧지만 열거형의 생성자는 묵시적으로 private라서 에러다
다음과 같이 하나의 열거형 상수에 여러값을 지정할 수도 있다.
다만 그에 맞게 인스턴스 변수와 생성자도 추가해야 한다enum{ EAST(1, 1), SOUTH(5, 5), WEST(-1, -1), NORTH(10, 10); private final int value; private final int value2; Direction(int value, int value2){ this.value = value; this.value2 = value2; } public int getValue(){ return value; } public int getValue2(){ return value2; } }
열거형의 추상메서드
enum Transportation{ BUS(100), TRAIN(150), SHIP(100), AIRPLANE(300); private final int BASIC_FARE; private Transportation(int basicFare){ BASIC_FARE = basicFare; } int fare(){ // 운송 요금 반환 return BASIC_FARE; } }
거리에 따라 요금을 계산하는 방식이 각 운송 수단마다 다를 것이기 때문에 이것만으론 부족하다.
이럴 때, 열거형에 추상 메서드를 선언하면 각 열거형 상수가 이 추상 메서드를 반드시 구현해야 한다enum Transportation{ BUS(100) {int fare(int distance) { return distance * BASIC_FARE; }}, TRAIN(150) {int fare(int distance) { return distance * BASIC_FARE; }}, SHIP(100) {int fare(int distance) { return distance * BASIC_FARE; }}, AIRPLANE(300) {int fare(int distance) { return distance * BASIC_FARE; }}; abstract int fare(int distance); // 거리에 따른 요금을 계산하는 추상 메서드 protected final int BASIC_FARE; // protected로 해야 각 상수에서 접근 가능 private Transportation(int basicFare){ BASIC_FARE = basicFare; } int fare(){ // 운송 요금 반환 return BASIC_FARE; } }
위에선 추상 메서드 fare를 똑같이 구현해놨지만, 다르게 구현될 수도 있게 하려고 추상 메서드로 선언한 것이다.728x90반응형'Java' 카테고리의 다른 글
Java 쓰레드(Thread) (1) 2024.02.26 Java 애너테이션 (0) 2024.02.26 Java 지네릭스(Generics) (0) 2024.02.26 Java 자료구조, 컬렉션 프레임웍 - 4, (Hash, Set, Map) (2) 2024.02.26 Java 자료구조, 컬렉션 프레임웍 - 3, (Iterator, ListIterator, Enumeration) (0) 2024.02.26