시니어 UP - 새로운 자바 프로그래밍 기법
    • 01
      일단 해보기
    • 일단 해보기
      Runnable
      System.out.println
      Random Array
      Sort
      Array Mapping
    • 02
      Language
    • Language
      서술적 프로그래밍
      자바에서의 노력
      객체지향적으로 설계
      서술적으로 설계
    • 03
      람다표현식
    • 람다표현식
    • 04
      메쏘드 레퍼런스
    • 메쏘드 레퍼런스
    • 05
      Interface
    • Interface
      default 메쏘드
    • 06
      Functional Interface
    • Functional Interface
    • 07
      java.util.function
    • java.util.function
      Consumer 정리
      Supplier 정리
      Predicate 정리
      Function 정리
    • 08
      Stream
    • Stream
      Stream 생성과정
      Stream 연산과정
      Stream 결과도출
    • 09
      길가에 있는 돌에 앉아
    • 길가에 있는 돌에 앉아
    서술적으로 설계
    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로 구현할 수 있었습니다.

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

    질문하기