[Java] 열거형 (enums)
순서가 있는 자료들을 나열할 때 사용한다.
여러 상수(final)들을 정의할 때 유용하게 사용된다.
자바의 열거형은 값과 타입을 모두 체크해 타입에 안전한 열거형이라고 한다.
열거형은 다음과 같은 형식으로 정의할 수 있고, 꼭대기의 클래스 / 인터페이스 / static 에만 정의될 수 있다.
(메서드에서는 정의될 수 없다.)
열거형 상수간에는 "==" 로 비교할 수 있다. String을 비교할 때는 원래 equals()메서드를 통해 비교했는데, 열거형은 둘 다 가능하다. (그만큼 성능이 좋고, 빠르다.)
다만, < 와 > 같은 비교 연산자는 사용할 수 없는데, 대신 compareTo()메서드를 이용해 열거형 상수들을 비교할 수 있다.
다음 코드를 작성했을 때 a b c d abcd 에는 각각 0 1 2 3 4 가 내부적으로 할당된다. compareTo()를 통해 값을 비교해 주자.
(valueOf(String str) : 인자로 받은 String에 해당하는 enum타입의 값으로 저장한다.)
왼쪽 코드의 실행 결과는
-4, 4, 0 이다.
compareTo() 메서드는 비교대상이 같으면 0 왼쪽이 크면 양수 오른쪽이 크면 음수를 반환한다.
compareTo() 메서드와 정수 0을 비교해 비교 연산자 역할을 수행할 수 있다.
각각의 enum값은 정수로 할당되는것 같지만, 좀 다르다.
위의 코드를 바탕으로 switch문으로 case를 구분할 때, 정수로 구분하게 되면 오류가 발생하고, 이를 해결하기 위해서 정수 대신 a,b,c,d,abcd 중 하나를 사용해서 작성해야 한다.
열거형으로 정의한 요소들을 values()메서드를 통해 배열로 바꿀 수 있다. 이건 열거형을 다룰 때 매우 중요하니 꼭 알아두자.
'Programming Language > Java' 카테고리의 다른 글
[Java] 스트림 (Stream) (0) | 2021.10.25 |
---|---|
[Java] 람다식 (Lambda expression) (0) | 2021.10.25 |
[Java] 컬렉션 프레임웍 (Collections Framework) (0) | 2021.10.19 |
[Java] 지네릭스 (Generics) (0) | 2021.10.17 |
[Java] Scanner클래스의 nextLine()과 next() 사용 시 주의점 (0) | 2021.10.05 |
댓글
이 글 공유하기
다른 글
-
[Java] 람다식 (Lambda expression)
[Java] 람다식 (Lambda expression)
2021.10.25 -
[Java] 컬렉션 프레임웍 (Collections Framework)
[Java] 컬렉션 프레임웍 (Collections Framework)
2021.10.19 -
[Java] 지네릭스 (Generics)
[Java] 지네릭스 (Generics)
2021.10.17 -
[Java] Scanner클래스의 nextLine()과 next() 사용 시 주의점
[Java] Scanner클래스의 nextLine()과 next() 사용 시 주의점
2021.10.05