Java Enum 에서는 함수형 인터페이스를 인자에 두고, 이를 오버라이딩 해서 사용하는 방식의 코드를 작성할 수 있습니다
이를 사용하는 것에는 주의가 필요하다고 생각하는 입장인데요
먼저 다른 언어와 같이 enum 마다 각각의 값이나, 상수를 저장하는 것은 당연하지만 무조건 필요하다고 생각하는 입장입니다
이와는 다르게 enum 에다 기능을 오버라이딩 해서 사용하는 것(함수를 추가하는 것)은 지양해야한다고 생각하는 입장인데요
public enum Day {
MONDAY(() -> {
Cook cook = new Cook();
cook.cook();
}),
TUESDAY(() -> {
WashingMachine washingMachine = new WashingMachine();
washingMachine.wash();
});
private final DailyRoutine 할_일;
Day(DailyRoutine 할_일) {
this.할_일 = 할_일;
}
}
enum 에서 다양한 일들을 하게 되는 경우에 위와 같은 형태가 되는데요
물론 각 enum 의 인스턴스 내부에서 하는 일은 명확할 수 있어도, 한 enum 내에서 모든 작업들을 호출해주는 시작점이 모일 수밖에 없다는 점은 명확한데요
하나의 java 파일 내에서 많은 너무 많은 코드가 작성되어서 가독성을 헤칠 수 있습니다반대로 이를 interface를 활용한 전략 패턴으로 바꾸었을 경우에
물론 각 enum 의 인스턴스 내부에서 하는 일은 명확할 수 있어도, 한 enum 내에서 모든 작업들을 호출해주는 시작점이 모일 수밖에 없다는 점은 명확한데요
하나의 java 파일 내에서 많은 너무 많은 코드가 작성되어서 가독성을 헤칠 수 있습니다반대로 이를 interface를 활용한 전략 패턴으로 바꾸었을 경우에
class MondayRoutine implements DailyRoutine {
@Override
public void doSomething() {
Cook cook = new Cook();
cook.cook();
}
}
class TuesdayRoutine implements DailyRoutine {
@Override
public void doSomething() {
WashingMachine washingMachine = new WashingMachine();
washingMachine.wash();
}
}
이런 형태로 코드가 작성되게 됩니다
위의 경우와는 반대로 한 클래스 내부에 코드가 적게 작성되기에 다른 사람들이 쉽게 이해할 수 있을 것 같습니다
위의 경우와는 반대로 한 클래스 내부에 코드가 적게 작성되기에 다른 사람들이 쉽게 이해할 수 있을 것 같습니다
'Java' 카테고리의 다른 글
Java Generic 딥 다이브 (6) | 2023.02.23 |
---|---|
Generics 시작하기 (6) | 2023.02.23 |
java에서 입출력 어디까지 테스트 해야할까요? (2) | 2023.02.19 |
Object 의 toString 부터 hashCode 까지 (0) | 2023.02.19 |
Java 면접 공부를 하면서 생겼던 궁금증들 (0) | 2022.10.05 |