한빛출판네트워크

IT/모바일

함수형 프로그래밍 with 자바

함수형 프로그래밍을 적용하여 객체 지향 자바 코드 향상시키기

한빛미디어

번역서

판매중

함수형 프로그래밍 with 자바
좋아요: 10
  • 저자 : 벤 바이디히
  • 역자 : 허귀영
  • 출간일 : 2024-03-27
  • 페이지 : 528쪽
  • ISBN : 9791169212175
  • 물류코드 :11217

합계 : 34,200

  • [저자] 벤 바이디히

    4살 때 처음 컴퓨터를 사용했고 독학으로 개발자가 되었습니다. 20년 가까이 웹, 모바일 및 시스템 분야에서 다양한 언어의 프로그래밍 경력을 쌓았습니다. 국제 임상 연구 기관에서 소프트웨어 개발과 프로젝트 관리를 배운 후 자영업 소프트웨어 개발자가 되었습니다. 그리고 여러 프로젝트에서 장기간 밀접한 협력을 통해 SaaS 회사와 합병하게 되었고, 공동 이사로서 회사의 방향을 결정하고 자바를 기반으로 한 제품의 모든 영역에 참여하며 모바일 전략을 감독하고 구현했습니다. 여가 시간에는 자바, 함수형 프로그래밍, 모범 사례, 일반적인 코드 스타일 등에 대해 글을 쓰며 그간 쌓아온 전문 지식과 경험을 공유합니다. 또한 오픈 소스 커뮤니티에 참여하여 프로젝트의 기여자로 활동하거나 코드를 공개하기도 합니다.

    [역자] 허귀영

    모바일 애플리케이션 창업을 통해 소프트웨어 개발에 흥미를 느껴, 개발자로서의 커리어를 시작했습니다. 동덕여자대학교 컴퓨터학과를 졸업한 후 롯데정보통신과 카카오뱅크에서 소프트웨어 엔지니어로 근무했습니다. 어제보다 더 성장한 개발자가 되는 것을 목표로 하고 있습니다. 인프라, 웹 서비스, 프로젝트 관리 분야에 관심을 가지고 있으며, 새로운 지식을 습득하고 이를 다른 사람들과 나누는 것에서 큰 즐거움을 느낍니다.

    • 자바로 익히는 함수형 프로그래밍의 기초

       

       

      사실 함수형 프로그래밍 자체는 범위가 매우 넓고, 제대로 이해하기 위해서는 많은 개념들을 학습해야 한다. 하지만 프로그래밍 언어를 사용하는 개발자 입장에서 그런것들을 모두 완벽하게 파악하고 어찌 개발을 할 것인가...  그래서 개발을 할 때 함수형 프로그래밍에서 제시하는 모든 개념에 대해 응용을 하면서까지 개발을 진행하지는 않을 것이다.

      자바의 함수형 프로그래밍 역시 마찬가지다. 자바 8에서 함수형 프로그래밍을 할 수 있도록 언어 자체가 굉장히 많이 버전업이 되었다. 이 때 개발자가 함수형 프로그래밍에 대해서 전부를 알 필요 없이 많은 것들을 추상화 하고 사용하기 쉽도록 언어적 차원에서 제공하게끔 변경되었고, 심지어 함수형 프로그래밍의 규칙을 벗어난 듯한 문법도 제공하게 되어 개발자가 함수형 프로그래밍을 쉽고 빠르게 프로덕션 레벨 수준에서 이용할 수 있게 되었다.

      그런 차원에서 혹시나도 자바를 사용하지만 함수형 프로그래밍에 대해서 접하지 못한 사람들에게 이 책은 도움이 된다.

       

       

      책은 개인적으로 크게 3파트로 구성되는 것 같다. 

      1. 함수형 프로그래밍에 대한 개괄

      2. 자바에서의 함수형 프로그래밍

      3. 자바에서 추가된 다른 기능들(Optional, CompletableFuture)

      우선 책의 앞 파트에서는 함수형 프로그래밍에서 사용되는 용어에 대해서 설명하고 있다. 함수형 프로그래밍이 최신의 기법은 절대 아니고 예전에 존재하던 개념인데 해당 패러다임을 사용하면 어떠한 장점이 있는지에 대해서 알 수 있고, 또한 내부적으로 사용하는 단어에 대해서도 알 수 있다. 

      개인적으로 해당 파트가 지루하다면 바로 파트 2로 넘어가서 자바에서 함수형 프로그래밍을 어떻게 적용하고 있는지 확인해보는 것이 좋을 것 같다.

       

       

      파트 2부터는 본격적으로 자바에서 어떤식으로 함수형 프로그매잉을 적용하는지에 대해서 설명한다. 그림과 코드를 같이 제공하여 해당 코드가 어떠한 방식으로 동작하는지에 대해서 쉽게 파악할 수 있을 것이다.

       

       

      그 이외에 자바 8부터 추가적으로 제공하는 기능들에 대해서 설명한다. 이 때 이러한 기능들이 함수형 프로그래밍식으로 코드를 작성할 수 있는데, 그 중에서도 Optional이 있다. 사실 자바에서 널 체크를 하는 부분이 어떻게 보면 굉장히 성가시고, 심지어 프로덕션 레벨에서 빼먹고 처리를 못하는 경우도 있지만, 해당 기능을 유용하게 잘 활용하면 안정적인 코드를 작성할 수 있다.

      위 Optional도 마찬가지로 map, filter와 같은 함수형 프로그래밍에서 사용되는 기법을 사용할 수 있으므로 좀 더 깔끔한 코드를 작성할 수 있다.

       

       

      특히 비동기 작업에서 Future만 제공하던 방식에서 CompleatableFuture을 자바 8에서 제공함으로써 함수형 프로그래밍 방식으로 비동기 작업을 깔끔하게 진행할 수 있게 되었는데 위 기능도 빠짐없이 설명하였다.

       

       

      이 책은 철처하게 함수형 프로그래밍에 대한 개괄과, 자바에서 함수형 프로그래밍을 어떻게 적용하고 있는지에 대해서 설명하고 있다. 함수형 프로그래밍에 대해서 처음 접하거나, 자바에서 함수형 프로그래밍을 적용시키는 것을 알고 싶은 사람들에게 추천한다.

      혹시나 자바 코드를 어떻게 잘 작성하는지에 대해서 알아보려면 모던 자바 인 액션 굉장히 추천한다. 이 책에서도 역시 함수형 프로그래밍에 대한 내용이 적혀 있으므로 해당 내용 확인해보면 매우 좋을 것이다.

      한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.


       

    • 2014년 자바 8에서 람다 표현식과 스트림 API가 나왔습니다.
      이로 인해 자바에서는 자바 8부터 함수형 프로그래밍의 시작되었다고 할 수 있습니다.

       

      하지만 대부분 사람들이 람다, 스트림등 많은 기능들이 있다는 것은 알지만 어느 상황에 사용해야 하는지는 잘 모릅니다.

      하지만 개발자는 상황에 따라 패러다임과 적합한 도구들을 선택하는 경우가 생기기 마련이죠.

       

      저자는 위와 같은 상황에 대한 다양한 선택을 할 수 있게

      언어를 함수형으로 만드는 다양한 개념들과 스트림, Optional, Com-pletableFuture와 같은 기능들에

      대해 자세하게 설명해주고 있습니다.

      그래서 개발자 입장에서 오류발생 가능성을 줄여주고, 더 간결하고 합리적인 코드를 작성하게 도와주며

      다양한 상황에 더 합리적인 코드 사용할 수 있도록 도와주고 있습니다.

       

      따라서 이 책은 자바에 대해 어느 정도 익숙하고 함수형 프로그래밍에 대해 알고는 있지만

      어디에 어떻게 사용하는지 잘 모르시는 분들, 혹은 효율적으로 코드를 리팩터링 하고 싶은 분들,

      백엔드 개발자와 자바 개발자 분들에게 추천드리고 싶습니다.

       

      위 내용은 "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

    • [BOOK] 함수형 프로그래밍 with 자바 - 벤 바이디히 지음 / 허귀영 옮김

       

       

      부제: "함수형 프로그래밍을 적용하여 객체 지향 자바 코드 향상시키기"

       

      개발자는 항상 깔끔하고 더 간결한 코드를 추구해야 합니다. - p. 51

       

      패러다임의 변화를 따라가는 것은 쉬운 일이 아닙니다. JAVA가 세상에 알려진 초기에는 C처럼 코딩하는 개발자도 (많이) 있었습니다. JVM에서 동작해야하니 JAVA로 개발했는데 손에 익은 프로그래밍 언어가 C라서 절차적인 방식으로 만들었던거죠. 언어를 사용하는 개발자에게도 힘든일이지만 패러다임의 변화를 수용해야하는 프로그래밍 언어 입장에서도 힘든 일입니다. 새로운 패러다임을 지원하면서도 기존 패러다임과의 호환을 유지해야하니까요. 이 책에서는 패러다임 변화에 대응하는 방법도 엿볼 수 있습니다.

       

      "함수형 프로그래밍 with 자바"는 함수형 프로그래밍에 대한 기초적인 설명과 JAVA에서 함수형 프로그래밍을 할 수 있도록 추가된 기능들을 설명합니다. 새로 추가된 기능이 하위 호환을 위해 어떻게 구성되어 있는지, JAVA의 기본 원칙을 지키면서 함수형 프로그래밍 기능을 제공하기 위해 어떤 고민을 했는지를 살펴볼 수 있습니다.

       

      함수형 원칙은 많은 객체 지향 디자인 패턴에서 필수적인 보일러플레이트 코드를 제거할 수 있는 가능성을 제공합니다. - p. 484

       

      이 책을 읽으려면 JAVA의 기본 문법은 알고 있어야 합니다. JAVA 8버전 이후에 추가된 문법을 알면 이해가 쉽습니다.  함수형 프로그래밍에 대해서는 책에서 기초부터 다루기 때문에 함수형 프로그래밍을 처음 접하더라도 문제 없습니다. 다만, 객체 지향과 함수형 프로그래밍에 대한 내용을 알고 있으면 책을 더 재미있게 읽을 수 있습니다. JAVA를 시작으로 Scala, Kotlin 등의 JVM 기반 함수형 프로그래밍을 경험해 보는 것도 좋겠네요.


      "한빛미디어 [나는 리뷰어다] 활동을 위해서 책을 제공받아 작성된 서평입니다."

    • ‘나는리뷰어다2024’ 서평단 멤버로 선정되어 이번 달에는 “함수형 프로그래밍 with 자바” 리뷰를 작성하게 되었습니다.

       

      함수형 프로그래밍 with 자바 책은 자바 8 이후의 기능을 활용하여 함수형 프로그래밍을 자바에서 어떻게 적용할 수 있는지를 다룹니다. 자바가 객체지향 언어임에도 불구하고, 이 책은 함수형 프로그래밍의 접근법 중 하나로 자바를 사용하는 방법을 제시합니다.

      저자는 자바에서 제공하는 기능인 람다 표현식과 스트림을 통해 함수형 프로그래밍의 개념을 설명하고, 이를 실제 코드로 어떻게 구현하는지를 쉽게 이해할 수 있도록 안내합니다. 특히 자바스크립트에서 익숙한 익명 함수를 자바에서 어떻게 활용하는지에 대한 예제도 제공됩니다.

      자바 언어는 OOP 객체지향언어로 함수형 패러다임에 익숙하지 않은 언어 중 하나입니다. 그렇지만 자바 8 이후부터 람다 표현식이 추가되고 자바 언어에서도 함수형 프로그래밍할 수 있었습니다.

      그러나 이 책이 “모던 자바 인 액션” 책과 다르게 함수형 프로그래밍을 다룬다는 점을 명심해야 합니다. “함수형 프로그래밍 with 자바”는 자바 언어의 기능을 중심으로 함수형 프로그래밍을 학습하고자 하는 분들에게 적합합니다. 따라서 자바를 이미 잘 알고 있는 개발자에게도 유용한 참고서가 될 것입니다.

      만약 자바를 처음 배우거나 함수형 프로그래밍을 자세히 이해하고자 하는 경우라면 이 책을 적극 추천합니다.

      “한빛미디어 활동을 위해서 책을 제공받아 작성된 서평입니다.”

    • 이 책에 쓰여 있는 내용들은 언젠가 실무에서 반드시 대면하게 될 내용들이다. 다만, 그것을 글로 체감하는 것과 경험을 한 후, 책을 통해 얻는 깊이는 다를 것이다.

      요즘 필자가 회사 업무를 담당하며 대면한 문제는 바로 모든 객체의 독립된 성격을 보존하는 동시에 가독력이 보장된 프로젝트를 만드는 것이다.

      솔직히 업무를 혼자 하는 것이라면 코드의 규칙이나 아키텍처가 어찌 되었건 결과적으로 돌아가는 무엇인가만 나오면 된다.
      확장이 가능한 느슨한 구조? 대략적인 인터페이스만 잘 뽑았다면 나중에 적당히 틀만 맞추면 되는 일이다.

      인프라 확장? MQTT를 비롯한 분산 구조로만 대략적으로 구성하면 되는 문제다.

      하지만, 협업의 관점에서 누군가가 내 코드를 봤을 때 혼란의 여지가 없고, 혹 실수를 하더라도 그 영향력을 최소화하는 프로그램을 구성한다는 것은 대단히 어렵고 쉽지 않은 이야기이다.

      그런 관점에서 이번에 리뷰를 진행한 함수형 프로그래밍 책은 누군가 추후 내 손을 떠난 이 프로젝트를 건들 때, 혹은 같이 협업을 하며 복잡한 로직을 누군가 살펴볼 때, 혼란의 여지를 줄이고 코드의 가독력과 생산력을 향상시키는 팁들과 관련 기술들을 묶은 훌륭한 책이라 할 수 있다.


      【책의 구성】 "함수형 프로그래밍 with 자바"의 구성은?

      본 서를 공부하기 좋았던 이유는 샘플 코드가 많다는 것이었다.

      저자가 충분히 글로써 친절히 설명하려 노력한 부분이 다수 보이나, 솔직히 코드를 설명하는 것은 코드를 보여주는 것만큼 훌륭한 접근법은 없다. 이 책은 글뿐만 아니라 예가 되는 샘플 코드들을 다수 채용하여 독자에게 제공하고 있기 때문에, 애매한 부분 없이 확실히 이해하는 데에 큰 어려움이 없었다.

      또한, 실무에서 대면할 법한 어려운 문제들에 대해서도 저자의 생각과 고찰이 적절히 이 책에 녹아들어 있기 때문에, 주니어와 시니어 사이를 달리는 중니어들이 이 책을 본다면 많은 것을 얻을 수 있을 것이라 생각된다.

      솔직히 너무 주니어들은 이 책을 읽어도 아~ 이런 게 있구나 정도이지 않을까 싶긴 하다.

       



      챕터 1 : 함수형 프로그래밍 소개

      거의 대부분의 책이 그렇듯. 이 책도 처음 챕터는 함수형 프로그래밍이 무엇인지. 함수형 프로그래밍이 지향하는 바가 무엇인지에 대해서 설명하고 있다.

      모든 법이 헌법에 그 근간을 두었듯, 모든 학문에 있어서 그 학문이 탄생하게 된 배경을 아는 것은 중요하다. 그렇기에 꼭 해당 챕터를 꼼꼼히 읽어두도록 하자.

      함수형 프로그래밍은 무엇일까? 간단하다.

      순수하며, 일관되며, 간결된 이 삼박자를 갖추면 그것이 함수형 프로그래밍이다. (간추려 정리하자면..)

       



      챕터 5 : 레코드

      이 장은 레코드 타입에 대해서 설명하고 있다.

      솔직히 POJO나 JavaBean이나 그 등장 배경은 코드를 많은 사람들이 보았을 때 통일성을 갖추게 하기 위함에 있다. 이 말이 무엇인고하면 A라는 객체가 있으면 그 A라는 객체는 중간에 변조 없이 A라는 객체의 본연의 역할 그 자체에 충실하면 된다는 것이다.

      하지만, 앞서 언급한 POJO든 JavaBean이 든 그 역할을 함에 있어서 아쉬운 부분이 많이 있었다. 중간에 변조가 발생할 수 있는 setter를 허용한다거나 보일러 플레이트 코드를 구성하기 위해 객체 정의의 상당 부분을 해당 코드로 낭비하는 등이 그것이다.

      하지만 modern java에서 지원해 주는 record라는 타입은 그러한 단점을 극복하고 보다 독립화된 객체를 쉽게 구성하는 데에 초점을 둔 타입이라 할 수 있다.

      필자가 10년 넘게 웹서비스 회사에서 일해보았지만, 아직 레코드 타입은 대중화가 안된 것 같긴 하다. 왜냐하면 대부분의 코드가 아직도 POJO나 JavaBean과 같이 옛날 형식 그대로 여전히 이어져 내려오고 있기 때문이다.

      아마 프로젝트가 오래되었거나, 아니면 이전 방식에 익숙한 다수의 개발자들에 의해 프로젝트가 시작되었기 때문이리라...

      【 함수형 프로그래밍 with 자바를 읽고 나서 】

      필자는 그동안 프로그래밍의 관점을 크게 객체지향적이냐 아니면 절차 지향적이냐 이 두 가지 분류로 나누곤 했는데, 이 책을 읽으며 객체지향적이건 절차 지향적이건 가장 중요한 관점은 다수가 코드를 보았을 때, 코드 하나하나의 역할이 확실히 정해져 있고, 중간에 변조가 없어 해당 객체 하나만으로도 그 룰이 충분히 정해지는 그런 코드가 협업에 있어서 중요하다는 것이었다.

      물론 협업을 하더라도 본인이 담당한 영역에 다른 사람이 손을 대는 일이 거의 없다면 위의 관점에서 프로그램을 구성하는 것은 낭비일 수 있다. 왜냐하면 어차피 내 코드는 나만 담당하고 나만 보는데, 어찌 프로그램을 짜든 무슨 상관이란 말인가?

      하지만 위와 같은 자세는 상당히 위험하다. 왜냐하면 누군가 꼭 보기 때문에 코드의 역할을 잘 세분화하고 가독성 있게 짜야 하는 것이 아니기 때문이다.

      옛말에 이런 말이 있다. '보기 좋은 떡이 먹기도 좋다.' 그렇다. 코드도 '보기 좋은 코드가 퍼포먼스, 코드 확장에 있어서도 용이하다.' 즉, 각 객체의 역할을 각 객체 본연의 성격에 맞게 잘 구성하고 코드의 가동력이 뛰어나며 이와 동시에 각 구간이 독립적으로 잘 추상화되어있는 프로젝트 그것이 바로 '보기 좋은 떡'에 해당하는 것이다.

      이제는 나름 규모가 있는 프로젝트는 혼자 하기엔 그 허들이 높아진 시대라 할 수 있다. 옛날 같으면 일인 개발자다 뭐다 해서 금방 금방 프로덕트를 뽑아냈지만, 지금은 조금 규모가 있다 싶은 프로젝트들은 어느 정도 개발자들을 모아 협업 없이는 만들 수 없는 시대가 되었기 때문이다. (아.. 물론 언젠가 이 부분을 AI가 대신해 줄 것이라 생각되지만..)

      따라서 협업의 관점에서 프로그램을 만들 줄 아는 능력. 이것이야말로 진정한 시니어로 거듭나는 지름길이라 할 수 있다.

      본 도서는 "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.

    • 리뷰

      자바를 거의 1년간 배웠고 이제는 제법 익숙한 언어가 되었습니다. 람다, stream, optional 등등 함수형 프로그래밍을 어느정도는 알고 있었지만 조금 더 배워보고 싶어서 이 책을 리뷰하게 되었습니다.


      책은 함수형 프로그래밍이 무엇인지부터 함수형 인터페이스, JDK에서 지원하는 함수형 인터페이스, stream, optional, 레코드 등등의 개념을 다룹니다. 레코드까지는 기본적으로 자바 프로그래머가 이미 알고있는 내용들을 복습하는 느낌이었습니다. 왜 불변성이 중요한지. Single Abstract Method 등 함수형 인터페이스가 되는 조건 등등에 대하여 설명합니다. 다만 당연하게 넘어갔던 것을 다시 한번 왜 그런지 생각해보고 넘어갈 수 있었던 시간이었습니다.


      이후에 레코드, 스트림부터는 중요한 기능등을 다양한 예제를 통해 공부할 수 있었습니다. 그냥 학습하는 것이 아니라 어떻게 하면 더 좋은 코드를 만들 수 있는지 생각하며 학습할 수 있습니다. 생각보다 난이도가 꽤나 있어서 읽는데 시간이 오래걸렸습니다. 단순한 개념만 얻어간 것이 아니라 개념 + 노하우를 배울 수 있던 시간이었습니다.

       

      누구에게 추천하는가

      이미 자바를 익숙하게 다룰줄 아는 사람. 어느정도 람다, 스트림, 함수형 인터페이스, 제네릭 등등을 알고 이해할 수 있는 사람.
      이런 분들이라면 해당 책을 재밌게 읽고 자신의 실력을 더 발전시킬 수 있다고 생각합니다.

      "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."


       

    • 한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.

       

      모던한 언어들의 대세에 따라 함수형 프로그래밍이 떠오르면서 'Java 에서의 함수형 프로그래밍' 에 대해서도 적지 않은 관심이 있다. Java 가 지원하는 함수형 인터페이스와 스트림은 이미 널리 쓰이고 있고 이는 Java 언어를 사용하는 개발자라면 익숙한 내용들이다. 이 책은 이것에서 한발 더 나아가 함수형 프로그래밍이란 무엇이고 Java 는 그것을 어떻게 지원하는지, 사용은 어떻게 하고 무엇을 조심해야 하는지 생각하게끔 한다.

       

      이 책은 Java 에서 함수형 프로그래밍 패러다임을 다루기 위한 기법으로 함수형 인터페이스, 레코드 타입, 스트림, 병렬 스트림, 그리고 옵셔널에 대해서 상세하게 다룬다. 단순히 문법에 대한 설명 뿐만 아니라 레코드 타입의 등장 배경, 옵셔널을 잘 사용하는 방법 등 예시와 구현들을 상당히 상세하게 설명하고 있다.

      나오는 키워드들이 초보가 보기에 가볍지 않은 만큼 이 책을 보기 위해 상속, 구현 등 Java 8 까지 포함된 기본 문법들은 당연히 잘 알아야 한다. 컬렉션, 제네릭, 제네릭 메소드 그리고 나아가 Java 가 동시성 프로그래밍을 다루는 법에 대해서도 미리 알고 있다면 이 책을 흥미롭게 볼 것이다.

       

      이제 책 속으로 뛰어들 준비는 됐다. '함수형 프로그래밍 with 자바' 는 크게 두 개의 파트로 나눠져있다. 첫번째는 함수형 프로그래밍 패러다임에 대한 소개와 Java 가 어떤 과정을 통해 이 패러다임에 합류하게 됐는지에 대한 설명이다. 두번째는 객체지향과 명령형 프로그래밍 언어인 Java 를 가지고 어떻게 함수형 패러다임을 접목할 수 있는지 기술적인 설명이다.

      첫번째 파트에서 함수형 프로그래밍 패러다임을 소개하면서  명령형 프로그래밍을 하는 자바 개발자들을 놀라지 않게 잘 달래준다. 이 책에 관심을 갖고 서평을 볼 정도면 잘 알고 있을 '무엇' 과 '어떻게' 에 대한 접근을 바탕으로 참조 투명성, 불변성, 일급 객체, 함수 합성, Currying function, Lazy evaluation 이 무엇인지 소개한다.

       

      막연하게 알고 있는 함수형 인터페이스 원형인 Function, Consumer, Supplier, Predicate 에 대해서 당연히 용법에 대해서 설명한다. 하지만 대게는 자바가 이렇게 많은 함수형 인터페이스를 가져야 하는 이유에 대해 명쾌한 해석이 없는것에 비해 이 책에서는 Lambda 대수의 개념 설명을 바탕으로 Java 에서 람다 표현을 취급하기 위해 일급 객체가 되어야 하고 그렇기 때문에 인터페이스가 단일 추상 메소드 (Single Abstract Method) 를 가져야 한다고 설명한다. 여기까지 이야기가 나오면 당연하지만 람다 표현식의 변화된 참조에 대해서도 설명한다.

       

      두번째 파트로 가면 첫번째 파트의 함수형 프로그래밍의 개요에서 설명했던 Java 의 함수형 프로그래밍 기법에 대해 더 자세하게 설명한다. Java 가 불변성을 지원하기 위해 사용하는 Unmodifiable collection, final 키워드, record 타입에 대한 설명도 있다.

       

      재미있었던 부분은 Java 는 python 같이 동적 언어들과 달리 Tuple 컬렉션 이 없다. 그래서 Tuple 자료를 다루기 위해  Map < Integer, List < String > > 따위의 상당히 번거로운 자료구조를 만들어야 한다. 강타입인 Java 언어의 특성상 선언은 어쩔수없이 해야하지만, 이 자료구조를 처리하기 위한 코드는 가만히 생각해봐도 번잡스럽기 마련이다. 이 책에서는 함수형 인터페이스의 선언과 스트림의 메소드 체이닝을 적절히 활용해 생각만해도 복잡한 코드를 어떻게 명시적으로 만드는지 예시를 보여준다. 궁금하면 서점에 가서 p.166 페이지를 보길 바란다.

       

      보통 스트림에 대해서 설명하면 map, filter, reduce 3개의 연산 타입이나 생성, 중간연산, 최종연산에 대해 간소하게 나오지만 이 책에서는 마블 다이어그램을 기반으로 각 연산 메소드가 어떻게 작동하는지, Spliterator 인터페이스의 특성에 따라 어떻게 병렬 처리를 하는지, 병렬 처리를 할 때 주의해야 할 점은 무엇인지 상세하게 설명한다.

       

      약간 부록의 느낌으로 생각했던 CompletableFuture에 대한 파트도 있다. Java의 비동기 처리를 위한 CompletableFuture 역시 작업을 선언하고 실행하고 결과를 수집하는 함수형 프로그래밍으로 작성된다. 때문에 간략한 문법에 대한 설명만 있을거라 생각했는데 생각보다 비동기 처리에 대한 저자의 고찰이 잘 녹아있어서 흥미롭게 읽었던 부분이였다.

      그 외에도 책에서는 다양한 JVM 기법들을 통해 Java 가 함수형 프로그래밍을 지원한다고 설명한다. 일일이 다 적을순 없지만

       

      - 선언형 프로그래밍으로 작성된 코드는 언제 실행되고 결과가 결정되는지 (invokedynamic)
      - 높은 아리티의 함수형 인터페이스는 무엇이 있는지 (BiFunctional)
      - 자바에서의 함수 합성은 구체적으로 어떻게 이뤄지는지 (Glue method)
      - 람다에서 예외를 어떻게 다루는지 (Try 타입)

       

      위 내용을 포함해 상당히 생각 해볼법한 내용이 많이 등장하기 때문에 함수형 프로그래밍 패러다임에 딱히 관심이 없더라도, Java 와 JVM 에 대해서 관심이 많은 사람이라면 꼭 한번 읽어보면 좋겠다는 생각을 한다.


       

    •  

      함수형 프로그래밍 with 자바입니다.

      자바를 공부하고 개발하면서 함수형 프로그래밍을 들어보신적이 있으신가요? 저는 들어본적은있지만 실제로 공부하고 사용하지는 않았는데요. 하지만 무의식적으로 이게 함수형 프로그래밍이 몰랐을 뿐이지 조금씩은 쓰고 있었습니다. 람다 표현, 스트림, 레코드, Optional도 실제로 토이프로젝트에서 사용하고 있었는데요. 함수형 프로그래밍을 쓰기 위해서는 이런 기본적이면서도 실제로 자주 사용하는 타입 및 데이터 처리를 조금은 알아야 합니다. 이런 표현식은 개인적으로는 자주 사용하는 표현식인데요. 저는 이게 처음에는 함수형 프로그래밍이다라고 사용해본적은 없지만 이 책을 읽고 나서 함수형 프로그래밍적으로 개발을 하고 있었으며 조금이나마 왜 함수형 프로그래밍으로 개발하는지 이해가 되었습니다.

      레코드같은 경우 완전히 lombok을 대체하기는 힘들겠지만 그래도 함수형 프로그래밍적으로 생각해서 나온 클래스 타입입니다.

      lombok도 사용하지 않으면서 불변적인 POJO를 만드려면 수십줄의 코드가 필요한데 레코드는 수줄이면 끝날정도로 간단합니다.

      이렇게 Java진형에서도 점점 더 함수형 프로그래밍적으로 생각하며, 개발하고 출시하며 그 시작은 개인적으로 유명한 람다식이라고 생각이 됩니다. Java8부터 시작한 개발자라만 누구나 알아야 한다고 생각이 될 정도로 유명한데 막상 개발을 하다보면 익숙하지 않아서 람다식으로 개발하지 않는 개발자가 많습니다. 저 역시 생각나면 사용하지만 리펙토링 할 때 IDE의 도움으로 람다식으로 조금씩 수정을 하는 편인데요. 함수형 프로그래밍 with 자바를 읽으면서 좀 더 람다식 그리고 스트림을 어떻게 자연스럽게 사용하는지 배울 수 있었습니다.

      실무에서 접해볼일이 많이 없기에 블로그나 인강으로만 조금씩 공부했는데 함수형 프로그래밍에 대해서 좀 더 자세하게 공부하니 장점과 단점이 보이면서 제가 토이 프로젝트에서도 활용할 수 있겠다는 생각이 들었습니다.

       

       

       

       

      함수형 프로그래밍은 어렵습니다. 자주 사용하면서도 모르게 사용하고 또는 함수형 프로그래밍을 알지만 그냥 무의식적으로 사용하는 개발자도 많은데요.(저처럼...) 함수형 프로그래밍의 기본적인 이해와 함께 자바에서 많이 사용하는 람다, 스트림, Optional등 이번에 조금이나마 활용할 수 있는 방법도 공부했습니다.

      단지 도서의 난이도는 있는편입니다. 자바를 어느정도 공부했더라도 실무에서 접하지 않았거나, 람다와 스트림에 대한 사용방법등을 모르면 도서를 이해하는데 조금은 어려울 수 있습니다. 왜 사용하는지도 모를 수 있는데요. 하지만 조금이라도 사용해 보았고 좀 더 활용할 수 있는 방법을 찾는다면 좋은 도서가 될거라고 생각이 됩니다.

      함수형 프로그래밍은 최근에 나온 요소가 아니기에 한번이라도 이해가 된다면 앞으로 다양한 언어 혹은 개발할때 많은 도움을 줄 수 있을거라고 생각됩니다.

       

      한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.

    • 함수형 프로그래밍을 자바로 배우고 싶다면 이 책으로 공부하세요

      함수형 프로그래밍 기초부터 람다, 스트림, 자바로 구현 가능한 함수형 프로그래밍 기법들과 비동기 프로그래밍 까지 

      최신 자바로 가능한 함수형 프로그래밍의 모든 것을 배울 수 있습니다 ~


    •  

      총평

      - 책의 난이도 : ★★★★

      - 추천 별점     : ★★★★

      - 추천 독자     :  자바를 이미 어느정도 사용하고 알고있는 개발자 중 함수형 프로그래밍을 적용해보고 싶은 분

      - 지은이          : 벤 바이디히 지음 / 허귀영 옮김

      - 출판사          : 한빛미디어


       

      말그대로 자바를 이용한 함수형 프로그래밍을 어떻게 적용할 것인지를 다루는 책입니다. 자바는 기본적으로 객체지향형 프로그래밍을 지향하고 있습니다. 다만 이는 병렬 처리를 통한 소프트웨어의 수평 확장이 쉽지 않습니다. 만약 문제가 간단하고 서로 관련이 없는 하위 문제로 분할할 수 있는 경우 병렬 처리가 훨씬 효과적입니다. 이 경우 함수형 프로그래밍이 유용하게 사용될 수 있습니다.

       

      이 책을 통해서 저자는 언어를 함수형으로 만드는 다양한 개념들과 JDK에서 제공하는 도구 또는 직접 생성한 도구들을 사용해 자바 코드에 결합하는 방법을 중점으로 설명합니다.

       

       

      책의 내용

      1부에서는 함수형 프로그램이의 핵심 개념과 역사, 자바에서 구현 하는 방법을 배워봅니다.

      2부에서는 함수형 원칙에 대해서 알아보고 레코드와 스트림 등의 주요 기능을 예제를 통해 학습합니다.

       

      좀 더 구체적인 내용은 다음과 같습니다.

      1장. 함수형 프로그래밍 소개 - 함수형 프로그래밍이 무엇인지, 여기서 쓰이는 개념인 불변성, 재귀 등을 학습합니다.

      2장. 함수형 자바 - 람다 문법과 구성, 익명 클래스, 람다 생성 및 호출 방법 등을 학습합니다.

      3장. JDK 함수형 인터페이스 - Function, Consumer, Supplier, Predicate 이 4가지 인터페이스를 학습하고, 함수 합성이나 확장 등을 알아봅니다.

      4장. 불변성 - 불변성 상태는 무엇인지를 알아보고 직접 만들어봅니다.

      5장. 레코드 - 데이터 유형으로 튜플이나 POJO를 만들어봅니다. 레코드의 내부 동작과 특징에 대해서 상새하게 알아보고 다양한 사례를 통해 학습합니다.

      6장. 스트림을 이용한 데이터 처리 - 함수형 데이터 파이프라인으로써의 스트림의 특성을 알아보고 파이프라인을 구축해봅니다.

      7장. 스트림 사용하기 - 원시 / 반복 /무한 스트림이 무엇인지 알아보고 배열에서 스트림으로 변경하는 것을 알아봅니다. 저수준 스트림을 생성해보고 다양하게 사용해봅니다. JMH를 통해서 스트림 성능을 측정하는 것 등을 학습합니다.

      8장. 스트림을 활용한 병렬 데이터 처리 - 병렬 스트림에 대해서 알아보고 활용해보며 주의할 점은 무엇인지 학습해봅니다.

      9장. Optional을 사용한 null 처리 - null 참조에 대해서 알아보고 Optional이 무엇인지 알아봅니다.

      10장. 함수형 예외 처리 - try-catch블록에 대해 알아보고 람다에서 체크 에외 함수형으로 예외를 다뤄봅니다.

      11장. 느긋한 계산법(지연평가)  - 자바의 구조에 대해서 알아보고 람다와 고차 함수 등을 통해서 다양한 접근 방식을 확인해봅니다.

      12장. 재귀 - 재귀에 대해서 알아보고 다양한 예시를 학습합니다.

      13장. 비동기 작업 - 비동기 파이프라인을 구축해보고, 스레드 풀에 대한 개념을 알아봅니다.

      14장. 함수형 디자인 패턴 - 함수형 디자인 패턴인 팩토리 / 데코레이션 / 전략 / 빌더 등의 패턴을 알아봅니다.

      15장. 자바를 위한 함수형 접근 방식 - 함수형 아키텍처를 알아보고 어떤식으로 구성해야하는지 학습해봅니다.

       

       

       

      책의 구성

      - Note등을 통해서 부가 설명이 잘되어 있고, 키워드는 색깔 및 블러 처리로 정리가 용이하게 되어있습니다.

       

       

      - 각 장의 마지막에는 핵심 요약이 있어서 학습 내용을 확인해 볼 수 있습니다.

       

       

       

      이상으로 도서 리뷰를 마치겠습니다.

       

      "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

    • 객체지향에 익숙한 기존 개발자나 언어에 어느정도 익숙한 자바 개발자가 함수형 프로그래밍에 접근하기 위해 시작하기 좋은 책인것 같다. PART 01은 차분히 읽고, 나머지는 관심 있는 부분 위주로 읽어도 괜찮겠다. 

       

      책 내용 중에 이런 말이 있다. “함수형 프로그래밍은 특정 언어 자체가 아닌 사고방식입니다”. 

      일단 불변성부터 조금씩 시작해봐야겠다. 

  • 내용이 없습니다.
닫기

해당 상품을 장바구니에 담았습니다.
장바구니로 이동하시겠습니까?