Skip to content

Instantly share code, notes, and snippets.

@LeoHeo
Last active June 11, 2018 08:39
Show Gist options
  • Save LeoHeo/6e869d55093ca5e1b146efbf8f0946e5 to your computer and use it in GitHub Desktop.
Save LeoHeo/6e869d55093ca5e1b146efbf8f0946e5 to your computer and use it in GitHub Desktop.
// 간단한 덧셈 뺄섬을 하는 Service class
// single responsibility principle도 위반
// 전혀 oop적인 코드도 아니다.
class CalculationService {
public int calculate(char calculation, int num1, int num2) {
if (calculation == '+') {
return num1 + num2;
} else if (calculation == '-') {
return num1 - num2;
}
}
}
// strategy pattern으로 리팩토링
interface Calculation {
int calculate(int num1, int num2);
}
class Addition implements Calculation {
@Override
public int calculate(int num1, int num2) {
return num1 + num2;
}
}
class Subtraction implements Calculation {
@Override
public int calculate(int num1, int num2) {
return num1 - num2;
}
}
class CalculateService {
private final Calculation calculation;
public CalculateService(Calculation calculation) {
this.calculation = calculation;
}
public int calculate(int num1, int num2) {
return calculation.calculate(num1, num2);
}
}
// 실행
final int addition = new CalculateService(new Addition()).calculate(1, 2)
final int subtraction = new CalculateService(new Subtraction()).calculate(1, 2)
// 자바 8 이후에는 람다식을 통해서 high-order functions가 간편하게 가능하다.
// 그래서 아래와같이 간단하게 구현이 가능하다.
interface Calculation {
int calculate(int num1, int num2);
}
class CalculateService {
public int calculate(Calculation calculation, int num1, int num2) {
return calculation.calculate(num1, num2);
}
}
// 실행
final int addition = new CalculateService().calculate((num1, num2) -> num1 + num2, 1, 2)
final int subtraction = new CalculateService().calculate((num1, num2) -> num1 - num2, 1, 2)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment