Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

희디비

[Java] enum 왜 쓰는 걸까? 본문

Java

[Java] enum 왜 쓰는 걸까?

희디비 2024. 11. 27. 11:47

Enum 이란?

 

Enumeration 의 약자로 열거라는 뜻을 가지고 있으며 관련있는 상수들의 집합을 의미 합니다.

enum은 왜 만들어졌을까요? 간단한 예시를 통해 알아보겠습니다.

 

과일 할인 정책

파라미터로 과일을 입력 하면 과일의 할인 퍼센트를 알려 주는 함수가 있습니다.

public static int fruitDiscountPercent(String fruit){
   if(fruit.equals("banana")){
      return 10;
   }
   if(fruit.equals("apple")){
      return 20;
   }
   if(fruit.equals("grape")){
       return 25;
   }
   return 0;
}

 

만약에 개발자가 비교하는 과일의 스펠링을 잘못쓰면 어떻게 될까요?

if(fruit.equals("appie")){
    return 20;
}

 

개발자 실수로 인해 사과를 구매하는 회원은 할인을 받지 못하는 상황이 발생합니다.

어떻게 하면 실수를 줄일수 있을까요? 음... 비교 String을 상수로 두면 실수가 줄지 않을까요?

public static final String BANANA = "banana";
public static final String APPLE = "apple";
public static final String GRAPE = "grape";
    
public static int fruitDiscountPercent(String fruit){
  if(fruit.equals(BANANA)){
      return 10;
  }
  if(fruit.equals(APPLE)){
      return 20;
  }
  if(fruit.equals(GRAPE)){
      return 25;
  }
    return 0;
}

 

나아진듯 하지만 여전히 실수를 할 여지도 있고 다른 문제도 존재 합니다.

사용자는 파라미터인 String fruit 입력 할때 어떤 과일을 입력 해야 하는지 모른다는 것입니다.

개발자들은 이 문제에 대해 고민 끝에 열거형 패턴을 만들게 됩니다.

public class Fruit {
    public static final Fruit BANANA = new Fruit();
    public static final Fruit APPLE = new Fruit();
    public static final Fruit GRAPE = new Fruit();
}
개발 코드
public static int fruitDiscountPercent(Fruit fruit){
   if(fruit == Fruit.BANANA){
     return 10;
   }
   if(fruit == Fruit.APPLE){
     return 20;
   }
   if(fruit == Fruit.GRAPE){
     return 25;
   }
   return 0;
}

사용자
int discountPercent = FruitClass.fruitDiscountPercent(Fruit.BANANA);

 

이렇게 만든 상수를 통해 파라미터로 받아 비교 할 수 있고

이미 만들어진 인스턴스를 비교 하기 때문에 동일성 비교가 가능합니다.

사용자 입장에서도 과일을 목록을 볼 수 있기 때문에 실수를 하지 않습니다.

 

이렇게 열거형 패턴을 사용 하여 타입 안정성을 보장할 수 있습니다.

개발자들이 열거형 패턴을 자주 사용함에 따라서 자바는 enum이라는 열거형을 제공 하기로 합니다.

 

열거형도 클래스이며 Enum은 추상 클래스 Enum을 상속 받습니다.

 

주석을 읽어보면 아래의 내용이 있습니다.

Java 언어 열거 클래스의 공통 기본 클래스입니다.

 

만약 원하는 파라미터 값만 받고싶다면 enum을 통해 타입 안정성을 가진 개발 하는 것이 좋을 것 같습니다!

'Java' 카테고리의 다른 글

[Java] 생산자 소비자 문제  (0) 2024.11.25
[Java] LockSupprot, ReentrantLock  (1) 2024.11.19
[Java] 메모리 가시성, 임계 영역  (4) 2024.11.15
[Java] Join, Interrupt, Yield  (0) 2024.11.12
[Java] 스레드의 생성과 생명주기  (0) 2024.11.10