개발새발

Enum을 사용하는 이유가 뭘까? 본문

우아한테크코스

Enum을 사용하는 이유가 뭘까?

무비인 2022. 2. 20. 19:03

Enum 클래스를 사용하기 전

 
Enum 타입의 클래스가 있다는 것은 알고 있었지만, 막상 활용해본 적은 없었다.

그런데 고정 클래스로 Enum type 의 클래스로 Coin 이 있는게 아닌가???

 static final 상수로 고정하지 않고 amount 를 return 받도록 했을까? 유추 해봤다.

동전 타입을 고정 시키기 위해

요구조건을 보면 500원, 100원, 50원, 10원만 사용이 가능하게 해두었다.

이번 미션에서 코인 타입별 갯수를 관리하기 위해 CoinType 이라는 클래스를 만들었다.

만약 Coin 이 그냥 상수였다면 여기서 코인 타입을 300원 으로 넣어도 생성될 것이다.

public class CoinType {
    private final int type; // 아무 숫자나 다 들어올 수있음
    private int amount;

    public CoinType(int type, int amount) {
        this.type = type;
        this.amount = amount;
    }

Enum 을 사용해서 타입 고정

public class CoinType {
    private final Coin type; // 여기는 무조건 500,100,50,10 원만 들어올 수 있음
    private int amount;

    public CoinType(int Coin, int amount) {
        this.type = type;
        this.amount = amount;
    }

관련 자원에 대한 추가 로직 생성 가능

Enum은 클래스이기 때문에 추가 로직이 생성 가능하다.

상태와 행위 관리를 한 곳에서 할 수 있게 된다.

Coin 을 위해 조작할 내용을 해당 클래스에 작성할 수 있다.

    public static List<Integer> toList() {
        return Arrays.stream(Coin.values()).map(Coin::getAmount)
            .collect(Collectors.toList());
    }

Enum 에서 지원하는 기본 메서드 사용 가능

Enum 클래스는 자체적으로 지원하는 메서드가 있어 추가 구현 없이 사용이 가능하다.

따라서 이 메서드를 사용할 수 있도록 하려고 Enum 클래스를 던져준 것이 아닐까.. 유추해본다.

  • values() 열거 타입을 배열로 만들어 리턴
  • ordinal() 해당 메서드는 해당 Enum 객체가 몇 번째에 있는지 ? 배열 index 를 리턴한다.
  • valueOf() 매개 값으로 동일한 값을 가진 Enum 객체를 리턴한다.
  • name() 열거 객체가 가진 문자열을 리턴한다.

 

느낀점

처음 구현을 할 때는 익숙하지 않아서, Enum Class 의 장점을 활용하지 못한채 

구현했었는데, 관련 자료를 찾아보고 공부하다보니 타입 고정, 메서드 활용 등 장점이 많음을 

알게 되었고, 많은 상수들을 효과적으로 관리 할 수 있음을 알게 되었다. 

아직 많이 파악하진 못해서 활용도가 떨어지지만, 이 부분도 많이 사용해보면서 감을 익혀야 할 것 같다.

 

참고

 

'우아한테크코스' 카테고리의 다른 글

객체, 설계  (0) 2022.08.24
JDBC와 JDBC Template  (0) 2022.04.27
MVC 패턴  (0) 2022.02.20
오류와 예외는 같은걸까?  (0) 2022.02.20
Mac에서 JAVA 버전 확인과 IntelliJ 에서 JDK 변환하기  (0) 2022.02.20