모던 자바 인 액션 2

minseok·2023년 4월 8일
0
post-thumbnail
post-custom-banner

동작 파라미터화 코드 전달하기

모던 자바 인 액션1 주요 포스팅 내용

  • java8에서 부터 함수형 프로그래밍을 쉽게 사용할 수 있게 API 지원
  • 멀티 코어를 쉽게 사용할수 있게 API 지원
  • Default Method

이전 포스팅에서 위 3개의 내용을 중심으로 학습하였으며 이 내용들은 앞으로 책에서 알려주는 내용들을 함축한다 라고 우리는 알게 되었습니다.

이번 포스팅은 java8에서 함수형 프로그래밍을 방법을 알아보겠습니다.








작업을 해야하는 패키지내역 조회 개발

녹색 고블린의 요구

java8이전의 훼손 여부 검사
3월 1일 요구사항을 받고 훼손이 안 된 것만 선택하는 코드를 작성합니다.

훼손이 되었으며 우선 처리 요청 여부 검사
3월 5일 훼손이 되었어도 고객의 우선 처리 요청이 있는 것이면 보여줍니다.

훼손이 된 후 10일이 지났는지 여부 검사
3월 9일 훼손이 된 후 10일이 지났으면 보여줍니다.

작성해야하는 코드가 굉장히 많다!

이렇게 추가적인 요구사항마다 메서드가 추가를 하면 되지만 앞으로의 변화무쌍한 요구사항에 필터링 메서드는 늘었다가 줄었다가 바뀌었다가 유지 보수성이 굉장히 떨어집니다.

그렇다면 이번 챕터의 주제인 동작 파라미터화를 사용하면 어떻게 코드폼이 변경되는지 알아보겠습니다.

💀 주제와는 벗어나지만 Eqauls는 Nullable한 객체에서 호출하지 맙시다.
해당 코드는 모두 Nullable할 수 있는 참조 값에서 메서드를 호출합니다.
Objects.equals() 사용하는 것을 권장합니다.








동작을 파라미터화 한다 = 다형적인 동작을 가질 수 있다.

다시 녹색 고블린의 요구를 가져옵니다.

잘 살펴보니 2가지의 동작을 가진다는 것을 알았습니다.

  • 조건을 검사한다.
    훼손이 안 된 패키지인지 확인한다.
    훼손이 되었어도 고객의 우선 처리 요청을 한 패키지인지 확인한다.
    훼손이 되었으면 훼손 후 10일 지났는지 확인한다.
  • 패키지를 보여준다.

이제 추상화된 동작 ???공통점이 생깁니다.
Package를 받아서 True/False를 반환한다.
이 조건을 만족하는 일급시민(함수)을 넘기는 방법에는 익명 클래스, 메서드 참조, 람다가 있습니다.
몇 가지 방식만 확인해보겠습니다.

람다를 사용하는 방식으로 풀었으며 이제 기존 java7방식의 보일러 플레이트도 제거 되었으며 변칙적인 요구사항에도 유연한 구조가 되었습니다.








한번 더 추상화!

녹색 고블린의 요구를 보니 또 다시 공통점을 발견했습니다.
동작만이 아니라 제네릭을 사용해 정확한 정보도 추상화를 하겠습니다.

  • 어떤 값을 받아
  • 어떤 조건에 부합하면
  • 어떤 값을 반환한다.

이제 필터링하는 함수에서 패키지라는 정확한 정보가 소멸되었습니다.

구현 코드
filter함수는 streamAPI에서도 제공합니다.
java8의 streamAPI는 map, filter, find..같은 데이터 처리를 편하게 할 수 있는 함수를 지원합니다.

java8부터는 데이터처리의 관점을 위한 템플릿 코드를 작성을 할 필요성이 많이 사라졌습니다.
부드러운 코드를 위해 위에서 구현한 filter같은 템플릿 코드가 이미 제공됩니다.








마무리..

사실 java8은 굉장히 오래된 버전입니다.
현대적인 언어 kotlin에서는 현재 학습중인 내용들을 더 간단하게 표현해줍니다.

모던 자바 인 액션에서 다소 구닥다리 버전을 다루지만 학습을 하면 이후 현대적인 언어 혹은 함수형 패러다임 언어로 넘어갈 수 있는 좋은 양분이 생길 것 입니다.

급하게 마무리하는 느낌이 많지만 피로도가 많이 올라서 이정도만 하고
다음 포스팅에서 다시 좋은 자리 가져보겠습니다.
감사합니다.





profile
즐겁게 개발하기
post-custom-banner

0개의 댓글