열거 상수 이늄을 이용하여 객체지향 코딩 기법 사용해보기!
이늄 자료를 사용하여 사용자가 생성한 자료형에 대한 정의 효과를 가진다.
기본 자바 enum 사용
1. enum class 생성
2. enum 수행 명령에 대한 정보를 묶어서 저장중인 CalculateCommand
3. client class 생성
4.mian class 생성
예제로 살펴보는 객체지향 효과 UP, enum 사용법
타입에 따른 연산까지 함께 이늄에 정의 가능하여 함수를 일급 객체로 사용한다.
*변수에 담기거나, 파라미터로 전달할 수 있는 자료형을 가리켜서 일급 객체라고 한다. 원래 메서드는 일급 객테가 아니지만 람다식을 사용하여 1급 객체처럼 취급한다. 자바스크립트, 파이썬에서 주로 지원한다.
Point) BiFunction은 마지막 제네릭은 리턴자료형, 그 전까지는 입력자료형을 정의할 수 있도록 1급 객체처럼 만들어준다.
BiFunction이 가지는 것을 수행할 때는 apply()를 통해 수행한다.
package ch01_04_enum.adv;
import java.util.function.BiFunction;
public enum CalculateType {
// 제어 자료와 실제 제어되었을 때 실행할 구문까지 함께 저장해놨음.
// 응집도가 높아졌음!(관련된 로직끼리 하나의 파일에 잘 구성되어있음)
ADD((num1,num2) -> num1 + num2), // 자바 화살표 함수처럼 단순 변수나 자료만 실행문에 두면 리턴자료로 간주함
MINUS((num1,num2) -> num1 - num2),
MULTIPLY((num1,num2) -> num1 * num2),
DIVIDE((num1,num2)-> num1/num2);
// 각 ENUM 자료형에 물려있는 함수의 형식에 대해서 멤버변수로 표현, 함수는 BiFunction이라는 자료형 사용
private BiFunction<Integer,Integer,Integer> exception; // <입력 자료형, 입력 자료형, 반환 자료형>
// CalculateType에 어떤 enum 자료를 대입하냐에 따라 맞춰서 해당 로직을 호출할 수 있음
CalculateType(BiFunction<Integer,Integer,Integer> exception){
this.exception = exception;
}
public int calculate(int num1, int num2){
// num1, num2를 받아 특정 enum에 매칭된 람다를 실행하기
// BiFunction 자료형은 .apply() 통해 변수에 담긴 람다를 실행합니다.
return this.exception.apply(num1,num2);
}
}
두 코드 차이는 Client측면에서 확인 가능! 클라이언트 측면에서 연산에 대한 로직을 고려하지 않는다.
package ch01_04_enum.basic;
public class Client {
public int someMethod(CalculateCommand calculateCommand){
CalculateType calculateType = calculateCommand.getCalculateType();
int num1 = calculateCommand.getNum1();
int num2 = calculateCommand.getNum2();
int result = 0;
if(calculateType.equals(calculateType.ADD)){
result = num1 +num2;
} else if (calculateType.equals(calculateType.MINUS)) {
result = num1 - num2;
} else if (calculateType.equals(calculateType.MULTIPLY)) {
result = num1 * num2;
}else if(calculateType.equals(calculateType.DIVIDE)){
result = num1/num2;
}
return result;
}
}
package ch01_04_enum.adv;
public class Client {
public int someMethod(CalculateCommand calculateCommand){
CalculateType calculateType = calculateCommand.getCalculateType();
int num1 = calculateCommand.getNum1();
int num2 = calculateCommand.getNum2();
int result = calculateType.calculate(num1,num2);
return result;
}
}
꼭 보면 좋은 참고자료~
https://techblog.woowahan.com/2527/
Java Enum 활용기 | 우아한형제들 기술블로그
{{item.name}} 안녕하세요? 우아한 형제들에서 결제/정산 시스템을 개발하고 있는 이동욱입니다. 이번 사내 블로그 포스팅 주제로 저는 Java Enum 활용 경험을 선택하였습니다. 이전에 개인 블로그에 E
techblog.woowahan.com