ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [live-study] 11주차 :: Enum
    JAVA/라이브 스터디 | whiteship 2021. 2. 15. 00:11

    https://youtu.be/HLnMuEZpDwU

    참고도서 : Java의 정석(3rd Edition), Java in a Nutshell

     

     

     


    0. Enum

    Enum(열거형)
    • 열거형은 서로 관련된 상수를 편리하게 선언하기 위한 것으로 여러 상수를 정의할 때 사용하면 유용하다.
    • 자바는 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도 당연히 중복이 제외된다.

     

    댓글

Programming Diary