-
[JAVA] 열거형(enum)이란?프로그래밍 언어/JAVA 2022. 10. 24. 23:16
📑 열거형이란?
열거형은 여러 상수를 선언해야 할 때, 편리하게 선언할 수 있는 방법이다. 일반적으로 상수를 선언할 때 다음과 같이 하는데, 이처럼 상수가 많을 때는 코드가 불필요하게 길어진다.
class Card{ static final int CLOVER=0; static final int HEART=1; static final int DIAMOND=2; static final int SPADE=3; static final int TWO = 0; static final int THREE = 1; static final int FOUR = 2; final int kind; final int num; Card(int kind, int num) { this.kind = kind; this.num = num; } }
이럴 때, 열거형을 이용하면 다음과 같이 간단히 상수를 선언할 수 있다. 위와 달리 따로 값을 지정해주지 않아도 자동적으로 0부터 시작하는 정수값이 할당한다.
class Card{ enum Kind { CLOVER, HEART, DIAMOND, SPADE} enum Value {TWO,THREE,FOUR} final Kind kind; final Value value; }
열거형을 이용해서 상수를 정의한 경우, 값을 비교하기 전에 타입을 먼저 비교하므로 값이 같더라도 타입이 다르면 컴파일 에러가 발생한다.
if(Card.kind.CLOVER == Card.Value.TWO) //컴파일 에러 : 타입 다름
열거형의 조상 - java.lang.Enum 메서드 살펴보기
📌 String name()
: 열거형 상의 이름을 문자열로 반환한다.
public class Ex12_5_enum { Kind kind = Kind.CLOVER; System.out.println("kind.name() = " + kind.name()); } enum Kind{ CLOVER("클로버"), HEART("하트"), DIAMOND("다이아몬드"), SPADE("스페이드"); private final String kind; Kind(String kind) { this.kind = kind; } public String getKind(){ return kind; } }
name()을 사용하면 CLOVER라는 값이 출력된다. 아래 메서드 설명시에도 Kind 이넘을 사용하는 것이니 참고!
📌 Oridinal()
:열거형 상수가 정의된 순서를 반환한다.
int ordinal = Kind.DIAMOND.ordinal(); System.out.println("ordinal = " + ordinal);
위의 코드에서 2가 출력되는데 DIAMOND가 0,1,2,3번째 중 2번째에 있기 때문이다.
📌 CompareTo()
: 매개값으로 주어진 열거 객체를 기준으로 전 후로 몇 번째 위치하는지 비교
Kind diamond = Kind.DIAMOND; Kind clover = Kind.CLOVER; System.out.println(diamond.compareTo(clover)); //2 System.out.println(clover.compareTo(diamond)); //-2
📌 valueOf()
: 매개값으로 주어지는 문자열과 동일한 문자열을 가지는 열거 객체를 리턴한다. 외부로부터 문자열을 받아 열거 객체로 변환할 때 유용하다.
Kind diamond1 = Kind.valueOf("DIAMOND"); System.out.println("diamond1 = " + diamond1);
반환값은 DIAMOND
📌 values()
:열거 타입의 모든 열거 객체들을 배열로 만들어 리턴
System.out.println(Arrays.toString(Kind.values())); for (Kind type : Kind.values()) { System.out.println(type); }
📑 열거형에 멤버 추가하기 ( 상수를 다른값과 연결 )
Enum 클래스에 정의된 oridinal()이 열거형 상수가 정의된 순서를 반환하지만, 이 값을 여거형 상수의 값으로 사용하지 않는 것이 좋다. 이 값은 내부적인 용도로만 사용되기 위한 것이기 때문이다. 열거형 상수 값이 불규칙인 경우 다음과 같이 열거형 상수 이름 옆에 원하는 값을 괄호()와 함께 적어주면 된다.
enum Direction{ 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는 열거형 상수 값을 저장하기 위한 것이므로 보통 final을 붙인다. 그 값을 얻기 위해 getValue()도 생성하였다.
열거형 생성자는 외부에서 호출이 불가능하다. 열거형 생성자는 제어자가 묵시적으로 private이기 때문에!
반응형'프로그래밍 언어 > JAVA' 카테고리의 다른 글
[JAVA] toString, (String), String.valueOf() 문자열 형변환 살펴보기 (0) 2022.11.17 [ch14 Stream] 스트림 생성과 연산, Optional<T> (0) 2022.11.01 [JAVA] TreeSet과 이진 탐색 트리 (1) 2022.10.15 [JAVA] Object 클래스의 equals()와 hashCode() 재정의 (1) 2022.10.15 [Servlet] HttpServletRequest, HttpServletResponse 파헤치기 (1) 2022.10.11