서술적으로 설계
02 Language
서술적으로 설계

객체 지향적으로 설계한 코드는 우리가 일반적으로 받아들일 수 있고 익숙한 스타일입니다.

후에 추가적인 기교를 부릴 순 있지만, 그저 패턴적인 의미일 뿐입니다.

지금부터는 람다 형식과 향상된 제너릭스를 이용하여 어떻게 서술적으로 설계하는지를 알아볼 겁니다.

실행 언어: java
우선 Anonymous class를 람다 표현식으로 구성합니다.
실행 언어: java
단순히 Print만 되는 게 아니라, 필터가 되면 특정 행동을 할 수 있게 interface를 구축했습니다.
실행 언어: java
printCheckPerson 메소드를 위와 같이 변경합니다.
실행 언어: java
Person을 출력하는 형태로 호출합니다.
실행 언어: java
실행 언어: java

협업하는 서브 모듈의 프로그래머가 결괏값을 String으로 넘겨 줄 수 있냐는 요청을 보내왔습니다.

데이터를 mapping하는 인터페이스를 생성하고 PersonDo 인터페이스의 파라미터를 변경합니다.

실행 언어: java

데이터를 mapping하는 과정을 printCheckPerson에 추가합니다.

실행 언어: java

그 사이에 스펙이 특정 나이에 있는 사람의 Full Name을 출력하라고 변경하였습니다.

하지만 interface를 위주로 구성하고 Lamda expression을 사용하여 간결하고 유연성을 확보하였기에 별다른 수정 없이 호출 부분만 변경합니다.

어느 정도 printCheckPerson 메소드가 완성되었습니다.

지금부터는 Generics를 사용하여 다양한 클래스를 지원하겠습니다.

실행 언어: java
실행 언어: java

PersonChecker를 Checker로 정정하고 <T> Generics를 추가합니다.

Parameter 역시 T type으로 변경합니다.

실행 언어: java
실행 언어: java

PersonDo의 가장 큰 문제점은 PersonToString이 생기면서였습니다.

String만을 받을 수 있기에 유연성이 확보되지 않습니다.

따라서 Do<T>로 명명하고, doPerson 메소드를 run(T t)로 명명합니다.

실행 언어: java
실행 언어: java
Mapper에게 Generics 2개를 두어 어떠한 타입으로든 Mapping할 수 있게 변경하였습니다.
실행 언어: java
실행 언어: java

printCheckPerson 메소드도 doWithList로 명명하고

메소드에 Generics를 추가하여 유연성을 확보합니다.

실행 언어: java
실행 언어: java

이제 기존의 interface와 Method를 변경하지 않고 필요한 스펙에 따라 변경할 수 있습니다.

filter→mapping→action이라는 로직을 프레임워크에 구현하고

결과물에 대한 행위는 사용자에게 위임합니다.

실행 언어: java

위의 구문에는 처음 보는 Lamda expression이 있습니다.

단순히 Parameter value를 그대로 return하는 Lamda expression입니다.

이런 형태의 Lamda expression을 Identity라고 부릅니다.

실행 언어: java
실행 결과를 확인해보세요!

이전의 객체지향에서 많이 추가하지 않고도 모든 객체를 받아 처리할 수 있게 됐습니다.

이런 개념은 java7 이전에도 anonymous class로 구현할 수 있었습니다.

하지만 람다 표현식과 향상된 제너릭스를 사용하여 불필요한 서브 코드를 제거함으로써 가독성과 목적성을 명확하게 하였습니다.

질문하기
추가 자료
no files uploaded

추가 자료가 없습니다

여기서 새로운 학습 자료를 확인하세요!
선생님이 추가한 자료들을 바로 확인할 수 있어요.