Java Enum의 활용

꺄악 운석이다·2022년 11월 20일
0

우테코 프리코스

목록 보기
2/7

enum은 일정 개수의 상수값을 정의해주고 그 외의 값은 허용해 주지 않는 타입이다.

이전에는 그저 상수 정의 용도 로만 사용을 했지만 생각보다 다양하게 활용을 할 수 있었다.

이미 많은 곳에서 enum의 기본적인 내용을 소개했으므로 정의나 기본은 생략하고 enum의 활용법에 대해 설명하겠다.

enum의 장점

  1. 문자열과 달리 IDE의 적극적인 지원을 받을 수 있다.
    • 자동완성, 오타검증...
  2. 허용 가능한 값들을 제한할 수 있다.
  3. 리팩토링에 용이하다.

데이터 간의 연관관계 표현

public enum Rank {
	FIRST("1", 20000000),
    SECOND("2", 3000000);
    
    private String rank;
    private int prize;
    
    Rank(String rank, int prize) {
    	this.rank = rank;
        this.prize = prize
    }
    
    public String getRank() {
    	return rank;
    }
    
    public int getPrize() {
    	return prize;
    }
}

위와같이 "FIRST", "1", 20000000 을 한 묶음으로 만들 수 있다. 또한 필요하다면 get메서드를 추가할 수 있다.

int reward = FIRST.getPrize();
String rank = SECOND.getRank();

enum에 메소드 활용하기

enum에도 class처럼 메소드를 사용할 수 있는데 enum에 메소드를 사용하면 더 관리하기 편한 코드를 만들 수 있다.

간단한 메서드 활용

public enum Student {
	JAMES("제임스",0),
    JOHN("존",1),
    // ~ 다른 학생 정보 ~
    ALICE("앨리스",2);
	
    private final String name;
	private final int number;
    
    Student(String name, int number) {
    	this.name = name;
        this.number = number;
    }
    
    public static Student fromName(String name) {
    	return Arrays.stream(Student.values())
        			 .filter(student -> student.name.equals(name)
                     .findAny()
                     .orElseThrow(() -> new IllegalArgumentException());
    }
    
    public int getNumber() {
    	return number;
    }

}
public int getStudentNumber(String name) {
	return Student.fromName(name)
    			 .getNumber();
}

위와 같이 enum을 활용하여 getStudentNumber()를 더 간단하게 구현이 가능하다.

함수형 인터페이스를 활용한 enum 사용법

enum에 함수형 인터페이스를 활용할 수 있다.

enum Calculate {
    PLUS((x,y) -> x + y),
    MINUS((x,y) -> x - y),
    MULTIPLY((x,y) -> x * y),
    DIVIDE((x,y) -> x / y);

    public final BiFunction<Integer, Integer, Integer> expression;
    Calculate(BiFunction<Integer, Integer, Integer> expression) {
        this.expression = expression;
    }

    public int calc(int x, int y) {
        return expression.apply(x,y);
    }
}
profile
멸종은 면하자

0개의 댓글