본문 바로가기
국비학원 전 강의 필사/점프 투 자바

#03-10 상수집합 (Enum) - <점프 투 자바>

by kkooHan 2022. 9. 1.

 

출처 : https://wikidocs.net/book/31

 

 

점프 투 자바

**초보 프로그래머를 위한 자바 입문서** 이 책은 문법위주의 지식보다는 이해중심의 지식을 전달하는 것을 주 목적으로 한다. 예를 들어 자바에서 잘 파악하기 힘든 개념 ...

wikidocs.net

 

 

 

 

 

 

필사 :

 

Enum은 서로 관련이 있는 여러 개의 상수 집합을 정의할 때 사용하는 자료형이다.

 

 

 1. Enum 만들기

 2. Enum은 왜 필요한가?

 

 

1. Enum 만들기

예를 들어 어떤 커피숍에서 판매하는 커피의 종류가 다음과 같다고 가정해 보자.

 

 - 아메리카노

 - 아이스 아메리카노

 - 카페라떼

 

이와 같이 3종류의 커피를 판매한다고 하면

다음과 같이 Enum으로 상수집합을 만들 수 있다.

 

enum CoffeType {

    AMERICANO,

    ICE_AMERICANO,

    CAFE_LATTE

};

 

정의한 상수 집합은 다음과 같이 사용할 수 있다.

 

public class Sample {

    enum CoffeType {

        AMERICANO,

        ICE_AMERICANO,

        CAFE_LATTE

    };

    

    public static void main(String[] args) {

        System.out.println(CoffeType.AMERICANO);   // AMERICANO 출력

        System.out.println(CoffeType.ICE_AMERICANO);   // ICE_AMERICANO 출력

        System.out.println(CoffeeType.CAFE_LATTE);   // CAFE_LATTE 출력

    }

}

 

또는 다음과 같이 반복문에서 사용할 수도 있다.

 

public class Sample {

    enum CoffeeType {

        AMERICANO,

        ICE_AMERICANO,

        CAFE_LATTE

    };

 

    public static void main(String[] args) {

        for(CoffeeType type: CoffeeType.values()) {

            System.out.println(type);   // 순서대로 AMERICANO, ICE_AMERICANO, CAFE_LATTE 출력

        }

    }

}

 

 

 

2. Enum은 왜 필요한가?

그렇다면 Enum을 사용하는 이유는 무엇일까? 어떤 장점이 있을지 생각해보자.

 

다음의 메소드를 생각해 보자. (아래에 설명할 내용들은 눈으로만 살펴보자.)

 

/**

 * 오늘 판매된 커피의 갯수를 리턴하는 메소드이다.

 * @param type 커피의 종류 ( 1: 아메리카노, 2: 아이스 아메리카노, 3: 카페라떼)

*/

int countSellCoffee(int type) {

    ... 생략 ...

}

 

위 메소드는 오늘 판매된 커피의 갯수를 리턴하는 메소드이다.

메소드의 내용은 중요하지 않기 때문에 생략했다.

입력으로 들어온 커피의 종류가 오늘 몇 개 판매되었는지를 리턴하는 메소드이다.

 

아메리카노의 오늘 판매 갯수를 알기 위해서는

다음과 같이 숫자 1을 넘겨야 한다.

 

int americano = countSellCoffee(1);

 

이 방식은 숫자 1이 아메리카노임을 기억하고 사용해야 한다는 불편함이 있다.

 

그리고 또, 다음과 같이 사용할 경우에도 문제가 발생한다.

 

int result = countSellCoffee(99);   // 99 타입은 존재하지 않으므로 오류가 발생한다.

 

물론 1, 2, 3 이라는 파라미터 값과 의미에 대해 명확히 알고 있다면

위와 같은 오류는 잘 발생하지 않겠지만

오류의 가능성은 여전히 존재한다.

 

이제 위에서 사용한 메소드를 다음과 같이 바꾸어 보자.

 

enum CoffeeType {

    AMERICANO,

    ICE_AMERICANO,

    CAFE_LATTE

};

 

/**

 * 오늘 판매된 커피의 갯수를 리턴하는 메소드이다.

 * @param type 커피의 종류 (CoffeeType)

 */

int countSellCoffee(CoffeeType type) {

    ... 생략 ...

}

 

위와 같이 메소드를 변경하면

이 메소드는 다음과 같이 숫자 대신 CoffeeType을 파라미터로 사용해야 한다.

 

int americano = countSellCoffee(CoffeeType.AMERICANO);   // 아메리카노의 오늘 판매횟수

 

숫자 1을 사용했을 때보다 코드가 명확해 진다.

그리고 countSellCoffee 메소드에는 CoffeeType에 정의된 상수만 전달할 수 있기 때문에

위에서 보았던 99처럼 엉뚱한 숫자값에 의한 오류가 발생하지 않는다.

 

즉, 정리해 보면 다음과 같은 장점이 있다.

 

 - 매직넘버(1과 같은 숫자 상수값)를 사용할 때보다 코드가 명확해 진다.

 - 잘못된 값을 사용함으로 인해 발생할 수 있는 위험성이 사라진다

 

===

프로그래밍에서 상수로 선언하지 않은 숫자를 매직넘버라고 한다.

===

 

 

 

요약 : 

 

1. Enum 만들기

enum CoffeeType {
    AMERICANO,
    ICE_AMERICANO,
    CAFFE_LATTE
};

System.out.println(CoffeeType.AMERICANO);

for(CoffeeType type : CoffeeType.values()); {
    System.out.println(type);
}

 

 


2. Enum은 왜 필요한가?

- 매직넘버를 사용할 때보다 코드가 명확해 진다.
- 잘못된 값을 사용함으로 인해 발생할 수 있는 위험성이 사라진다.

 

int countSellCoffee(CoffeeType type) {

  ... 생략 ...

}

 

int americano = countSellCoffee(CoffeeType.AMERICANO);

 

 

 

 

 

느낀점 : 

 

상수 : 변하지 않고, 항상 일정한 값을 갖는 수.

 

 

enum = enumertation : 열거하다.

열거형.

열거자 이름들은 일반적으로 해당 언어의 상수 역할을 하는 식별자이다.

(나무위키)

 

 

상수 집합이라고 해서 숫자일 필요는 없나보다.

변하지 않고 일정한 값을 갖는다는 것이 더 중요한가 보다.

댓글