ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] enum
    언어/Java 2021. 1. 1. 19:51

    enum(열거) 타입은 소스 파일을 생성하고 해당 파일에 작성을 진행합니다. 소스 파일이나 enum 타입 이름은 관례적으로 단어의 첫 글자는 대문자로 지정하고 enum의 상수는 전부 대문자로 연결하고 여러 단어는 언더바(_)로 연결합니다.


    enum(열거) 타입은 아래와 같이 선언합니다.

    package com.company;
    
    public enum Member {
        LOGIN_SUCCESS,
        LOGIN_FAILED // 세미콜론 생략가능
    }
    


    enum 타입은 참조타입이기 때문에 null을 할당할 수 있습니다.

    Member success = Member.LOGIN_SUCCESS;
    Member failed = null;


    위 설명과 같이 enum 상수는 각각이 객체로 생성이라서 힙 영역에 생성이 되고 메소드 영역에서 생성된 힙 영역의 각 주소값을 가지고 있습니다.

    위의 선언과 같은 경우, success는 스택 영역에 선언이 되고 LOGIN_SUCCESS가 참조하고 있는 주소값을 복사받아 동일한 힙영역의 객체를 가리킵니다. 따라서 아래와 같은 비교를 진행하면 true가 나오게 됩니다.

    Member success = Member.LOGIN_SUCCESS;
    
    
    success == Member.LOGIN_SUCCESS // 동일한 메모리 주소값을 가지므로 가리키는 객체가 같음


    아래와 같이 description과 같은 기능도 제공할 수 있습니다.

    public enum Member {
        LOGIN_SUCCESS("로그인 성공 enum"),
        LOGIN_FAILED("로그인 실패 enum");
    
        private final String description;
    
        Member(String description) {
            this.description = description;
        }
    
        public String getDescription() {
            return this.description;
        }
    }
    
    
    
    
    ....
    
    
    
    
    Member s = Member.LOGIN_SUCCESS;
    Member s1 = Member.LOGIN_FAILED;
    
    System.out.println(s);
    System.out.println(s.getDescription());
    
    System.out.println(s1);
    System.out.println(s1.getDescription());
    
    
    
    
    // LOGIN_SUCCESS
    // 로그인 성공 enum
    // LOGIN_FAILED
    // 로그인 실패 enum


    댓글