코딩/Java

상수와 enum2

enum은 열거형(enumerated type)이라고 부른다. 열거형은 서로 연관된 상수들의 집합이라고 할 수 있다. 위의 예제에서는 Fruit와 Company가 말하자면 열거인 셈이다. 이러한 패턴을 자바 1.5부터 문법적으로 지원하기 시작했는데 그것이 열거형이다. 이전 코드를 enum으로 바꿔보자.

 

switch에서 case Furuit.APPLE를 쓰지 않는 이유는 위의 type의 데이터 타입이 Furuit이기 때문에 쓸 필요가 없는 것이다.

 enum은 많은 곳에서 사용하던 디자인 패턴을 언어가 채택해서 문법적인 요소로 단순화시킨 것이라고 할 수 있다.

 

if(Fruit.APPLE == Company.APPLE){

    System.out.println("과일 애플과 회사 애플이 같다);

}

이 코드는 여기서 컴파일 에러가 발생할 것이다.

enum이 서로 다른 상수 그룹에 대한 비교를 컴파일 시점에서 차단할 수 있다는 것을 의미한다.

 

enum을 사용하는 이유를 정리하면 아래와 같다.

코드가 단순해진다.

인스턴스 생성과 상속을 방지한다.

키워드 enum을 사용하기 때문에 구현의 의도가 열거임을 분명하게 나타낼 수 있다.

 

 

열거형의 활용 :

 

enum은 사실상 클래스가 그렇기에 생성자를 가질 수 있다. 

위의 코드는 enum Furuit 클래스의 생성자를 생성해서 call를 했다. 근데 결과는 3번이나 실행이 되었다.

이게 무슨 뜻이냐면 

public static final Fruit APPLE = new Fruit();
public static final Fruit PEACH = new Fruit();
public static final Fruit BANANA = new Fruit();

이거와 같은 의미라는 것을 증명하는 것이다. 인스턴스화를 하게되면 그 인스턴스의 생성자가 호출이 되는데 

new Fruit(); 이 실행 되기 때문에 3번 실행 되는 것이다.

 

단순히 상수로써의 기능만 하는게 아니라 그 상수가 어떠한 값을 갖게 하는 등 더 많은 일을 할 수 있는 것이 enum형의 장점이다. (간결하게)

 

 

열거형이 갖고 있는 상수들을 values 라는 메소드를 통해 상수들을 담은 배열을 가져올 수 있기에 저장되어 있는 상수들의 값을 꺼내서 하나하나 처리할 수 있다.

'코딩 > Java' 카테고리의 다른 글

제네릭  (0) 2021.01.10
참조와 복제  (0) 2021.01.09
상수와 enum  (0) 2021.01.08
object 클래스  (0) 2021.01.06
자바 나만의 예외 만들기  (0) 2021.01.06