인프런 커뮤니티 질문&답변

오스즈님의 프로필 이미지

작성한 질문수

김영한의 실전 자바 - 중급 1편

열거형 - Enum Type

Enum 내부에 인스턴스 생성 불가

해결된 질문

작성

·

292

0

=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

[질문 내용]
Enum 타입이 생성자를 private로 하여 외부 생성을 막은 클래스와 거의 동일하다고 하셨는데 그 부분에 이해가 안되는 부분이 생겨 질문 드립나다.

 

public class Grade {

    public static final Grade BASIC = new Grade();
    public static final Grade GOLD = new Grade();
    public static final Grade DIAMOND = new Grade();

    private Grade() {
    }

    //자기 자신의 클래스에서 새로운 인스턴스 생성 (가능)
    public static Grade generate() {
        return new Grade();
    }
}

위의 코드처럼 class로 만든 경우 private으로 외부 인스턴스 생성을 막아도 자신 클래스 내부에서는 새로운 인스턴스 생성하는 코드에 빨간줄이 나타나지 않았습니다.

 

public enum Grade {
    BASIC, GOLD, DIAMOND

    //자기 자신의 클래스에서 새로운 인스턴스 생성 (불가능)
    public static Grade generate() {
        return new Grade();
    }

강의에서 위의 코드와 거의 동일한 코드라고 해주셨던 Enum타입으로 클래스를 만들경우는 아래의 generate 메서드에서 새로운 인스턴스를 만들 수 없다며 빨간줄이 생깁니다.

 

위의 코드와 아래 코드의 어떤 부분에서 이러한 차이가 생기는지 궁금합니다. 단순히 private으로 외부 인스턴스 생성만 막은 경우라면 자기 자신 안에서는 인스턴스 생성이 가능해야 할 것 같은데 어째서 Enum에서는 자기 자신 내부에서 생성이 불가능한 건가요?

 

private으로 외부 생성을 막더라도 저런식의 generate 메서드를 만들면 외부에서 인스턴스 생성이 가능해 지지 않을까 하는 생각에 만들다가 이런 차이를 발견해 질문 드립니다.

 

답변 2

3

기은님의 프로필 이미지

2024. 04. 04. 23:47

열거형 복습하다가 답변 남겨봐요 강의에서 열거형 장점에 제한된 인스턴스 생성이라는 장점이 있습니다. Enum Grade에서 정의된 BASIC, GOLD, DIAMOND들은 암묵적으로 fianl이 적용됩니다 이것을 class 에서 풀어서 보여주실려고 설명해주시면서 동일하다고 하신 거 같은데 class는 인스턴스 생성이 가능하고, Enum은 인스턴스 생성이 불가능하다라고 이해하시면 될 거 같습니다..

1

codesweaver님의 프로필 이미지

2024. 04. 05. 13:38

안녕하세요. 오스즈님, 공식 서포터즈 코즈위버입니다.

기은님 말씀처럼, Enum 타입은 new 연산자를 이용해 인스턴스를 생성할 수 없습니다 🙂

감사합니다.