-
[자바] 열거형 ( enum )자바 2022. 7. 23. 00:03728x90
열거형
서로 관련된 상수를 편리하게 선언하기 위한 것으로 여러 상수를 정의할 때 사용하면 유용하다.
값 뿐만 아니라, 타입까지 체크하기 때문에 타입에 안전하다 ( 값 들이 변경되지 않는다 (final) 의 성향이 있음 )
열거형 사용하는 방법
enum 열거형이름 { 상수명1, 상수명2, ... } enum Direction { EAST, SOUTH, WEST, NORTH }
사용하는 방법 ' 열거형이름.상수명 '
열거형 상수간의 비교는 ' == ' 사용할 수 있다.
'>' '<' 같은 비교 연산자는 사용할 수 없고 compareTo( ) 사용가능하다.
switch문의 조건식에도 열거형을 사용할 수 있다.
대신에, case문에 열거형의 이름은 적지않고, 상수의 이름만 적어야 한다.
모든 열거형의 조상 - java.lang.Enum
values()는 열거형의 모든 상수를 배열에 담아 반환한다 ( 컴파일러가 자동적으로 추가해주는 메서드가 있다. )
메서드 설명 Class<E> getDeclaringClass() 열거형의 class객체를 반환한다 String name() 열거형 상수의 이름을 문자열로 반환한다 int ordinal( ) 열거형 상수가 정의된 순서를 반환한다( 0부터 시작 ) T valueOf(Class<T> enumType, String name) 지정된 열거형에서 name과 일치하는 열거형 상수를 반환하다 valueOf()는 컴파일러가 자동적으로 추가해주는 메소드 이며, 열거형 상수의 이름으로 문자열 상수에 대한 참조를 얻을 수 있다.
열거형에 멤버 추가
열거형 상수의 값이 불연속적인 경우에는 열거형 상수의 이름옆에 원하는 값을 ( ) 과 함께 적으면 된다
enum Direction { EAST(1), NORTH(2), WEST(3), SOUTH(4) }
지정된 값을 저장할 수 있는 인스턴스 변수와 생성자를 새로 추가해 주어야 한다.
먼저 열거형 상수를 모두 정의한 다음에 다른 멤버들을 추가한다. ( 마지막에 ; 해주기 )
enum Direction { EAST(1), NORTH(2), WEST(3), SOUTH(4); // ; 붙이기 private final int value; // 정수를 저장할 필드( 인스턴스 변수 )를 추가 // 열거형의 인스턴스 변수는 반드시 final 이어야 한다. Direction(int value) { this.value = value; } // 생성자를 추가 public int getValue() { return value; } // 외부에서 이 값을 얻을 수 있게한다. }
열거형의 생성자는 외부에서 호출불가
Direction d = new Direction(); // 열거형의 생성자는 제어자가 묵시적으로 private이다.
열거형에 이해
static 상수 값은 객체의 주소이고, 이 값은 바뀌지 않으므로 ' == '로 비교가 가능하다
이전 코드와 enum 사용 코드 Fruit.APPLE Company.GOOGLE 이런식으로 접근하면 된다
열거형 변형
enum Fruit { APPLE("red"), PEACH("pink"), BANANA("yellow") Fruit() { // 생성자를 가질 수 있다 -> field값도 가질 수 있다 ( 변수 메소드 ) System.out.println("Call " + this); //3번 enum의 개수만큼 반복됨, this는 enum값을 보임 } private String color; public String getColor() { return this.color; } Fruit(String color) { System.out.println("Call " + this); this.color = color; // 이렇게 해서 색을 넣을 수 있다. } } public class ConstantDemo { public static void main(String[] args) { Fruit type = Fruit.APPLE; switch(type) { case APPLE: System.out.println(Fruit.APPLE.getColor()); break; case PEACH: System.out.println(Fruit.PEACH.getColor()); break; case BANANA: System.out.println(Fruit.BANANA.getColor()); break; } } } public class ConstantDemo { public static void main(String[] args) { for(Fruit f : Fruit.values()) { System.out.println(f); // 각각의 이름(상수)들을 출력한다 } } }
'자바' 카테고리의 다른 글
[자바] 쓰레드 (0) 2022.07.23 [자바] 애너테이션 (0) 2022.07.23 [자바] 제네릭스 (0) 2022.07.22 [자바] 컬렉션 프레임웍 (0) 2022.07.21 [자바] 날짜와 시간 & 형식화 (0) 2022.07.21