-
[live-study] 11주차 :: EnumJAVA/라이브 스터디 | whiteship 2021. 2. 15. 00:11
참고도서 : Java의 정석(3rd Edition), Java in a Nutshell
0. EnumEnum(열거형)
- 열거형은 서로 관련된 상수를 편리하게 선언하기 위한 것으로 여러 상수를 정의할 때 사용하면 유용하다.
- 자바는 C언어와 달리 원래 enum을 제공하지 않았으나 JDK1.5부터 새로 추가되었다. 그리고, 현재 자바의 Enum은 C언어보다 더 많은 장점을 갖고 있다.
- C/C++같은 경우 enum은 결국 값이 int지만, 자바의 enum은 타입도 관리 할 수 있는 완전한 기능을 갖춘 클래스이다.
1. enum 정의하는 방법
enum 정의
- 간단하게 아래와 같이 괄호 { } 안에 상수의 이름을 나열하면 된다.
- 예를 들어, 3가지 Grade를 상수로 정의하는 enum Grade는 아래와 같다.
enum 사용
- 아래와 같이 'enum이름.상수명'으로 상수를 사용할 수 있다.
- 열거형 상수간의 비교에는 '=='를 사용할 수 있으며, '<, >'와 같은 비교연사자는 사용할 수 없고 compareTo()를 사용할 수 있다.
- case문에서도 enum을 사용할 수 있는데, 주의할점은 case문에 상수의 이름만 적어야 한다는 점이다.
enum 사용 - ordinal()
- enum의 ordinal()이라는 함수를 이용하면, enum 상수를 순서대로 반환한다. (왼쪽부터 0으로 시작)
enum 사용 - 멤버 추가
- 위에서 본 ordinal 같은 경우 내부적인 용도로 사용하기 위한 것이므로, 상수의 값으로 사용하기에 적절하지는 않다.
- 상수의 값은 다음과 같이 정의할 수 있다. 이 때, 지정된 값을 저장할 수 있는 인스턴스 변수(필드)와 생성자도 추가해주어야 한다.
- 하지만, 생성자를 생성하였다고 해서 객체를 생성할 수 있다는 것은 아니다. enum 생성자의 제어자는 묵시적으로 private이다.
2. enum이 제공하는 메소드 (values()와 valueOf())
values()
- values()는 열거형의 모든 상수를 배열에 담아 반환하는 역할을 한다.
- 이 메소드는 모든 열거형이 가지고 있는 것으로 컴파일러가 자동으로 추가해준다.
valueOf()
- values()처럼 컴파일러가 자동적으로 추가해주는 메소드이다.
- 이 메소드는 enum 상수의 이름으로 문자열 상수에 대한 참조를 얻을 수 있다.
3. java.lang.Enum
java.lang.Enum
- 모든 enum의 조상이다.
- enum 클래스의 일부를 보면 아래와 같다.
- 유일한 생성자인 protected Enum(String name, int ordinal)을 볼 수 있다.
4. EnumSet
EnumSet
- enum 타입을 이용해서 set을 구현하는 것이다. set은 기본적으로 중복을 허용하지 않고, EnumSet도 당연히 중복이 제외된다.
'JAVA > 라이브 스터디 | whiteship' 카테고리의 다른 글
[live-study] 13주차 :: I/O (0) 2021.02.21 [live-study] 12주차 :: 애노테이션 (0) 2021.02.15 [live-study] 10주차 :: 멀티쓰레드 프로그래밍 (0) 2021.02.15 [live-study] 9주차 :: 예외 처리 (0) 2021.02.06 [live-study] 8주차 :: 인터페이스 (0) 2021.01.30