디자인 패턴은 유용하다.
람다 표현식을 디자인 패턴에 적용한다면 더 간결하게 구현할 수 있다.
전략패턴
먼저, 다음과 같이 인풋에 대해 유효성을 검증을 전략패턴을 통해 구현할 수 있다.
1
2
3
4
|
public interface ValidationStrategy {
boolean validate(String s);
}
|
1
2
3
4
5
6
7
8
9
10
11
|
public class MyValidator {
private final ValidationStrategy validationStrategy;
public MyValidator(final ValidationStrategy validationStrategy) {
this.validationStrategy = validationStrategy;
}
public boolean validate(String s){
return validationStrategy.validate(s);
}
}
|
1
2
3
4
5
6
7
|
public class IsNumber implements ValidationStrategy {
@Override
public boolean validate(final String s) {
return s.matches("\\d+");
}
}
|
1
2
3
4
5
6
|
public class IsOverFiveLength implements ValidationStrategy {
@Override
public boolean validate(final String s) {
return s.length() > 5;
}
}
|
위처럼 구현된 전략패턴을 아래 처럼 사용할 수 있다.
1
2
3
4
5
6
7
8
9
10
|
public class Main {
public static void main(String[] args) {
String input = "123456";
MyValidator numberValidator = new MyValidator(new IsNumber());
System.out.println(numberValidator.validate(input));
MyValidator fiveLengthValidator = new MyValidator(new IsOverFiveLength());
System.out.println(fiveLengthValidator.validate(input));
}
}
|
하지만 이 경우 ValidationStrategy 를 구현하는, 즉 조건이 많아진다면 조건에 따른 클래스를 또 만들어주어야 하는 수고로움이 발생한다.
이 때 람다 표현식을 사용한다면 그 수고로움을 덜 수 있다.
방법은 다음과 같다.
1
2
3
4
|
public interface ValidationStrategy {
boolean validate(String s);
}
|
1
2
3
4
5
6
7
8
9
10
11
|
public class MyValidator {
private final ValidationStrategy validationStrategy;
public MyValidator(final ValidationStrategy validationStrategy) {
this.validationStrategy = validationStrategy;
}
public boolean validate(String s){
return validationStrategy.validate(s);
}
}
|
여기까지는 동일하지만 람다 표현식을 이용하면 구현체를 만들어 줄 필요가 없다.
1
2
3
4
5
6
7
8
9
10
|
public class Main {
public static void main(String[] args) {
String input = "123456";
MyValidator numberValidator = new MyValidator((String s) -> s.matches("\\d+"));
System.out.println(numberValidator.validate(input));
MyValidator fiveLengthValidator = new MyValidator((String s) -> s.length() > 5);
System.out.println(fiveLengthValidator.validate(input));
}
}
|
만약 검증하고 싶은 (간단한)조건들이 늘어나더라고 위와 같은 방법으로 별도의 클래스 생성없이 구현할 수 있다.
※ 람다 표현식을 사용하는 것이 항상 좋은 것은 아니다.
경우에 따라 불필요한 코드를 제거할 수 있어서 유용할 수 있고, 기존의 방식을 고수하는 것이 좋을 수 있다.
반응형
'Java' 카테고리의 다른 글
람다 표현식을 활용한 디자인패턴 - 옵저버 패턴 (0) | 2020.04.08 |
---|---|
람다 표현식을 활용한 디자인패턴 - 템플릿 메서드 (0) | 2020.04.08 |
스트림 활용 정리 (0) | 2020.04.04 |
스트림 기본 정리 (0) | 2020.04.04 |
Optional (0) | 2020.03.29 |