출처 : https://wikidocs.net/book/31
필사 :
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 : 열거하다.
열거형.
열거자 이름들은 일반적으로 해당 언어의 상수 역할을 하는 식별자이다.
(나무위키)
상수 집합이라고 해서 숫자일 필요는 없나보다.
변하지 않고 일정한 값을 갖는다는 것이 더 중요한가 보다.
'국비학원 전 강의 필사 > 점프 투 자바' 카테고리의 다른 글
#04 제어문 - <점프 투 자바> (0) | 2022.09.01 |
---|---|
#03-11 형변환과 final - <점프 투 자바> (2) | 2022.09.01 |
#03-09 집합 (Set) - <점프 투 자바> (0) | 2022.08.31 |
#03-08 맵 (Map) - <점프 투 자바> (0) | 2022.08.31 |
#03-07 리스트 (List) - <점프 투 자바> (0) | 2022.08.28 |
댓글