시니어 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
    객체지향적으로 설계

    "객체 지향적으로 설계"와 "서술적으로 설계"에서는

    오라클에서 공식적으로 보여주는 튜토리얼입니다.

    우리는 앞으로 이러한 설계방식을 따라야 하며

    본문에서는 상황에 맞게 조금 각색했습니다.

    원문(https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html)을 참고하여 같이 보면 좋습니다.

    저는 이 예제를 보았을 때 자바의 우아함에 또 한 번 놀랐습니다.

    난잡함 없이 제너릭스를 구현하는 기교나 자바만의 우직한 철학에 감동하였습니다.

    다음 본문부터는 하나의 가상시나리오로 기술합니다.

    아마도 이 강의에서 가장 철학적인 부분이 될 것 같군요.


    프로그래밍 인생을 잠시 내려놓고

    오로지 하나만을 추구하는 자바의 우아함을 받아들여 한 단계 성장하는 시간을 갖도록 합시다.


    Person 객체를 정렬하는 단순한 프로그램을 Object-oriented Paradigm으로 설계하고자 합니다.

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

    몇 개의 필드와 of 메소드를 가지고 있는 Person 클래스를 선언했습니다.

    printOrderThan 메소드로 List에 있는 Person 중 age 필드가 14 이상인 Person을 출력하게 했습니다.

    java

    이제 개발 스펙은 변경되었고

    기존 printOrderThan 메소드는 printBetweenAge로 변경됐습니다.

    java
    printBetweenAge의 내용은 Person 객체의 age 필드가 12와 19 사이인 객체를 출력하는 형태입니다.
    java
    실행 결과를 확인해보세요!

    최종 변경사항입니다.

    하지만 개발 스펙은 다시 바뀌고 필터를 추가해야 하는 상황이 됐습니다.

    java
    java

    특정 나이 사이에 있고, 특정 Family Name을 가지고 있는 Person 객체를 추출하는 필터와

    특정 글자가 이름에 포함되어 있으면 Person 객체를 추출하는 필터가 추가되었습니다.

    java
    계속되는 필터 요구에 따라 인터페이스를 만들고 위임하는 형태로 구성하고자 합니다.
    java
    추후의 재사용성을 위해 CheckPersonWithAge라는 클래스를 만들고 PersonChecker를 implement 하였습니다.
    java
    기존에 있던 필터메소드를 printCheckPerson으로 명명
    인터페이스 객체를 받을 수 있게 명명했습니다.
    java
    메소드를 호출할 때 CheckPersonWithAge의 객체를 생성하여 넘겨주었습니다.
    java

    이후 스펙에 따라 PersonChecker를 implement 하는 클래스를 매번 정의하는 것은

    유연성이 없다고 판단, Anonymous class 형태로 호출하게 됩니다.

    java
    실행 결과를 확인해보세요!
    여기까지가 객체 지향적으로 설계한 소스입니다.
    질문하기