ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Java | Enum 열거형
    JAVA/JAVA 2020. 2. 13. 23:41

    Enum 열거형

    java.lang.Enum< E >
    Class Enum< E Extends Enum < E >>

    연관된 상수들을 하나의 타입으로 지정할 수 있도록 하는 클래스

    • 서로 관련있는 상수들을 모아서 하나의 자료형으로 선언함
    • 열거형으로 선언된 순서에 따라 0부터 index 값을 가지며, 1씩 증가함
    • enum 열거형으로 지정할 상수들은 전부 대문자로 선언
    • 열거형 상수들을 선언한 뒤에 세미콜론(;)을 작성하지 않음
      상수("문자열")등 상수와 다른 값을 연결하는 경우에는 ; 작성
    • 다른 클래스와 마찬가지로 다른 파일, 클래스 안, 클래스 밖에 선언 가능

    Enum 장점

    • 코드가 단순해지며 가독성이 좋아짐
    • 인스턴스 생성과 상속을 방지하여 상수값의 안정성이 보장됨
    • 상수 자료형을 정의함으로써 해당 자료형 이외의 상수 값은 저장되지 못하게 함
      final로 상수를 정의하는 경우 상수이기만 하면 어떤 값으로든 초기화가 가능하지만
      상수의 자료형이 Type인 경우에는 해당 Type에 맞는 상수로만 초기화 가능
    • enum 예약어를 사용하므로 열거 의도를 분명히 함

    Enum 형식

    접근 제어자 enum 클래스명{
        상수1, 상수2, 상수3,,,,
    }

    Enum Method

    메소드 설명
    toString() enum 상수의 이름을 반환함
    name() 메소드도 동일한 역할을 하지만 보다 사용자 친화적인 toString()의 사용이 권장됨
    ordinal() enum 클래스에서 해당 상수가 선언된 위치를 반환
    가장 앞에 선언된 상수가 0의 값을 가짐
    values() enum 클래스에 선언된 상수들을 enumClass[ ] 배열로 반환
    valueOf(String name) 매개변수로 주어진 name과 얼치하는 이름을 갖는 열겨형 원소 반환

    예제

    package j200213;
    
    enum Album {
        FIRST, SECOND, THIRD, FOURTH
    }
    
    public class Singer {
    
        public String name;
        public int age;
        public Album album;
    
        public static void main(String[] args) {
            Singer singer = new Singer();
    
            singer.name = "박효신";
            singer.age = 40;
            singer.album = Album.FIRST;
    
            System.out.println("가수 이름: " + singer.name);    // 가수 이름: 박효신
            System.out.println("가수 나이: " + singer.age);     // 가수 나이: 40
            System.out.println("가수 앨범: " + singer.album);     // 가수 앨범: FIRST
    
            // enumClass.values(), enum 클래스에 선언된 상수들을 배열로 반환
            for (Album a : Album.values()) {
                System.out.print(a + "\t");
            }
            // FIRST SECOND THIRD FOURTH
    
            // 줄바꿈
            System.out.println();
    
            // enumClass.FINAL.ordinal(), enum 클래스에 선언된 해당 상수의 순서를 정수로 반환
            System.out.println(Album.FIRST.ordinal());         // 0
            System.out.println(Album.SECOND.ordinal());     // 1
            System.out.println(Album.THIRD.ordinal());         // 2
            System.out.println(Album.FOURTH.ordinal());     // 3
    
            // enumClass.valueOf(), 매개변수로 주어진 String과 열거형에서 일치하는 이름을 갖는 원소 반환
            Album al1 = Album.FIRST;
            Album al2 = Album.valueOf("FIRST");
            System.out.println(al1); // FIRST
            System.out.println(al2); // FIRST
        }
    
    }

    Enum 상수를 다른 값과 연결

    • 상수("연결 문자"), 상수(값)과 같은 형태로 작성
    • 상수들을 열거한 끝에 ; 작성
    • 해당 자료형에 맞는 private 생성자 필요
      외부 클래스에서 상속 또는 인스턴스 생성을 하지 못하도록 함
      → private이 아닌 경우 에러 발생
    • 연결한 값을 반환해 줄 getter 메소드 필요

    예제_상수 & 문자열 연결

    열거형 상수와 문자열을 연결하고 출력하는 예제

    package j200213;
    
    enum Song {
        // 상수("문자열") 선언
        FIRST("숨"), SECOND("야생화"), THIRD("HOME"), FOURTH("꿈");
    
        // 문자열이 저장될 private 상수
        final private String title;
    
        // 생성자, "문자열"을 매개변수로 전달해서 title 값 초기화
        private Song(String title) {
            this.title = title;
        }
    
        // title 반환 getter 메소드
        public String getTitle() {
            return title;
        }
    
    }
    
    public class Singer2 {
        public static void main(String[] args) {
            // values() 메소드로 인해 Song 타입 객체 song이 생성되면서 title 값이 초기화되고
            // getTitle() 메소드로 title을 반환할 수 있게 됨
            for (Song song : Song.values()) {
                System.out.print(song.getTitle()+"\t");
            }
            // 숨    야생화    HOME    꿈
        }
    }

    예제_상수 & 정수 연결

    열거형 상수와 정수를 연결하는 예제

    위의 예제와 형식은 동일하기 때문에 주석은 제거

    package j200213;
    
    enum Song {
        // 상수(정수) 선언
        FIRST(1), SECOND(2), THIRD(3), FOURTH(4);
    
        final private int track;
    
        private Song(int track) {
            this.track = track;
        }
    
        public int getTrack() {
            return track;
        }
    
    }
    
    public class Singer2 {
        public static void main(String[] args) {
            for (Song song : Song.values()) {
                System.out.print(song.getTrack() + "\t");
            }
            // 1 2 3 4
        }
    }

    연관된 상수들을 여러 개 사용하는 경우 사용할 수 있는 Enum클래스에 대해 알아보았습니다.

    열거형으로 상수를 선언하면 가독성도 높아지고 관리하기도 편해지기 때문에

    코드를 깔끔하게 작성하는 데에 중요한 역할을 한다고 합니다.

    상수와 값을 연결할 필요가 있을 때는 위의 예제에서처럼 private 멤버 변수, private 생성자, getter 메소드로

    각 상수에 값을 연결하고 또 연결된 값을 반환할 수도 있겠습니다. 

     

    'JAVA > JAVA' 카테고리의 다른 글

    Java | Lambda Expression 람다식  (0) 2020.02.14
    Java | JDBC 예제 with Oracle  (0) 2020.02.13
    Java | JDBC with Oracle  (0) 2020.02.13
    Java | Properties Class  (0) 2020.02.12
    Java | Socket & Thread 채팅 프로그램 만들기  (1) 2020.02.12

    댓글

Designed by Tistory.