디자인 패턴은 유용하다.
람다 표현식을 디자인 패턴에 적용한다면 더 간결하게 구현할 수 있다.
템플릿 메서드
알고리즘 개요를 제시하고 알고리즘의 일부를 수정할 필요가 있을때 템플릿 메서드를 사용한다.
예를들어 라면을 끓이는 과정을 코딩해보자.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
public abstract class 라면 {
public void cook(){
prepareWater();
inputPowder();
inputNoodle();
}
protected void prepareWater(){
System.out.println("물을 넣는다.");
}
protected abstract void inputPowder();
protected void inputNoodle(){
System.out.println("면을 넣는다.");
}
}
|
수프를 넣는 과정말고는 물을 붇고 면을 넣는 과정은 동일하다.
수프는 각 라면의 종류에 따라 다르므로 '라면' 클래스를 상속받는 곳에서 구현해준다.
1
2
3
4
5
6
7
|
public class 신라면 extends 라면 {
@Override
protected void inputPowder() {
System.out.println("신라면 수프를 넣는다.");
}
}
|
1
2
3
4
5
6
7
|
public class 짜파게티 extends 라면 {
@Override
protected void inputPowder() {
System.out.println("자장 수프를 넣는다.");
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
public class Main {
public static void main(String[] args) {
신라면 ramen1 = new 신라면();
ramen1.cook();
System.out.println();
짜파게티 ramen2 = new 짜파게티();
ramen2.cook();
//실행결과
// 물을 넣는다.
// 신라면 수프를 넣는다.
// 면을 넣는다.
//
// 물을 넣는다.
// 자장 수프를 넣는다.
// 면을 넣는다.
}
}
|
위의 코드는 라면의 종류가 늘어날수록 그에 해당하는 클래스를 추가 해주어야 하는 수고로움이 있다.
하지만 람다 표현식을 사용한다면 그 수고로움을 덜 수 있다.
람다 표현식을 사용하여 구현하면 다음과 같다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
public class 라면 {
public void cook(Runnable runnable){
prepareWater();
runnable.run();
inputNoodle();
}
protected void prepareWater(){
System.out.println("물을 넣는다.");
}
protected void inputNoodle(){
System.out.println("면을 넣는다.");
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
public class Main {
public static void main(String[] args) {
라면 ramen1 = new 라면();
ramen1.cook(()-> System.out.println("신라면 수프를 넣는다."));
System.out.println();
라면 ramen2 = new 라면();
ramen2.cook(()-> System.out.println("자장 수프를 넣는다."));
//실행결과
// 물을 넣는다.
// 신라면 수프를 넣는다.
// 면을 넣는다.
//
// 물을 넣는다.
// 자장 수프를 넣는다.
// 면을 넣는다.
}
}
|
※ 람다 표현식을 사용하는 것이 항상 좋은 것은 아니다.
경우에 따라 불필요한 코드를 제거할 수 있어서 유용할 수 있고, 기존의 방식을 고수하는 것이 좋을 수 있다.
반응형
'Java' 카테고리의 다른 글
람다 표현식을 활용한 디자인패턴 - 의무 체인 패턴 (0) | 2020.04.11 |
---|---|
람다 표현식을 활용한 디자인패턴 - 옵저버 패턴 (0) | 2020.04.08 |
람다 표현식을 활용한 디자인패턴 - 전략 패턴 (0) | 2020.04.08 |
스트림 활용 정리 (0) | 2020.04.04 |
스트림 기본 정리 (0) | 2020.04.04 |