Last active
June 11, 2018 08:39
-
-
Save LeoHeo/6e869d55093ca5e1b146efbf8f0946e5 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 간단한 덧셈 뺄섬을 하는 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; | |
} | |
} | |
} | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 자바 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