오늘은 Enum에 대해 배웠다.
Enum
은 특정 값들로만 입력이 가능한 데이터타입이다. 열거형이라고도 부른다.
예를 들어 계절은 세상에 딱 네가지로 분류되어있다. 그런 사계절로 Enum을 만들 수 있다.
public enum Season{
SPRING, SUMMER, FALL, WINTER
}
Enum 도 필드를 생성할 수 있으며, 이 때 생성한 필드는 반드시 Enum 생성자의 매개변수로 들어가야한다.
Enum의 생성자는 Enum 값들에 대한 생성자이며 이 매개변수들에는 함수형 인터페이스가 들어갈 수 있다.
함수형 인터페이스는 여럿이 있지만 대표적으로 다음과 같은 것들이 있다.
기본 함수형 인터페이스
Consumer<T>
: 데이터타입 T를 매개변수로 받아 반환값 없이 함수를 실행Supplier<T>
: 매개변수 없이 데이터타입 T를 반환Function<T, R>
: 데이터타입 T를 매개변수로 받아 데이터타입 R을 반환Predicate<T>
: 데이터타입 T를 매개변수로 받아 boolean 타입을 반환
매개변수가 두 개인 함수형 인터페이스
BiConsumer<T,U>
: 데이터타입 T와 U를 받아 반환값 없이 실행BiFunction<T, U, R>
: 데이터타입 T와 U를 받아 데이터타입 R을 반환BiPredicate<T, U>
: 데이터타입 T와 U를 받아 boolean 타입을 반환
이 때, 이 함수형 인터페이스들을 실제로 사용하기 위해서(매개변수 적용) 다음과 같은 식을 덧붙여준다.
.get()
.accept(T t)
.apply(T t)
.test(T t)
import java.util.function.Function;
public enum LolSalary {
//enum 값들 : Function<T t>를 람다식으로 표현
TOP ((salaryCap) -> (int)(salaryCap*0.2)),
JUNGLE ((salaryCap) -> (int)(salaryCap*0.1)),
MID ((salaryCap) -> (int)(salaryCap*0.4)),
ADC ((salaryCap) -> (int)(salaryCap*0.2)),
SUPPORT ((salaryCap) -> (int)(salaryCap*0.1));
//필드
public Function<Integer, Integer> salary;
//생성자 : 반드시 필드를 매개변수로 가지고 있어야한다.
LolSalary(Function<Integer, Integer> salary){
this.salary = salary;
}
}