과거에는 함수형, 객체지향형이라는 언어를 각각 선택하여 각 언어의 체계를 사용하여 프로그래밍을 하였다.
하지만 이러한 방식의 사용이 멀티패러다임이라는 언어로 발전하게 되었다.
대부분 사용하는 언어가 객체지향형, 명령형, 그리고 함수형을 동시에 지원하게 되었다고 한다.
이런 언어가 객체지향형을 기반으로 시작되었고 여러 기능을 포함하여 다양한 기능을 제공하고 하나의 언어에서 멀티 패러다임을 지원하게 되었다.
이런 언어의 체계변화가 혼란스러울 수 있지만 이런 변화는 다양하게 조합하여 더 나은 코드를 작성할 수 있게 하였고 여러 문제를 해결할 수 있는 방식도 제공하게 되었다.
이 책은 이런 멀티패러다임이 언어를 확장하게 한 여러 기법들에 대한 소개와 함께 이러한 방법이 설계된 이유를 다루어 이해를 돕는다.
이후 타입스크립트로 예시 코드로 타입 추론과 함수 타입을 통해 코드이 안정성과 가독성을 높이는 방식으로 안전하게 코드를 작성하여 함수의 반환 타입을 자동으로 추론하는 내용을 다루며 고차 함수를 구성하는 패턴과 LISP 계열 언어로 코드와 데이터를 동일하게 취급하는 메타 프로그래밍의 장점을 소개한다.
뿐만 아니라 코드와 객체, 함수가 각각 제너레이터, 이터레이터, 그리고 LISP와 유사한 관계를 소개하여 명령형, 객체지향적, 함수형 접근 방식을 모두 가지는 프로그래밍 모델을 만들 수 있는 방식을 이해하도록 한다.
또한 코드와 데이터의 경계가 없는 프로그래밍 언어의 특징을 가지는 LISP를 통해 앞서 설명했듯이 코드와 데이터의 경계가 없는 특성을 반영하고 하스켈을 통해 함수형 프로그래밍의 이점을 이해하여 프로그래밍에 적용하는 방식을 배우고 안전하고 가독성을 높일 수 있도록 한다.
또한 가장 관심있게 읽었던 부분인 비동기 처리를 통해 애플리케이션의 성능과 응답을 높이고 이를 통해 네트워크 뿐만 아니라 I/O 처리의 큰 이점을 제공하는 중요한 기법을 다룬다.
이를 통해 Pomise로 여러 비동기 작업을 조합하고 제어하며 결과를 한번에 처리할 수 있도록 도와 비동기 작업의 흐름을 이해하도록 돕고 효율적으로 처리하는 방식을 배울 수 있다.
에러 처리 부분에 있어서도 에러의 원인을 찾도록 돕고 이를 해결하는 방식을 명확히 이해하도록 돕는다.
중반부에서는 앞서 이해한 프로그램 기법을 통해서 다양한 데이터 구조에서 코드의 일관을 유지하고 데이터의 각 처리 단계를 독립적으로 하도록 코드를 작성하게 하여 코드의 재사용성을 높여 여러 조건이 추가되거나 로직이 수정되어도 복잡하지 않게 수정할 수 있도록 도와 유지보수의 이점을 실제 데이터와 코드를 작성해봄으로써 이해하도록 돕는다.
이후에는 복잡한 문제 상황에서 상황에 따라서 객체지향, 함수형, 명령형 패러다임을 적절히 조합하여 사용하는 전략을 다루어 멀티 패러다임의 강점을 통해 복잡한 요건들을 쉽게 해결할 수 있도록 돕는다.
이 책은 나와 같이 객체지향 프로그래밍에 익숙한 개발자들이 함수형, 명령형 언어의 이점과 처리 방식을 정확히 이해하여 여러 상황에서 적절히 조합하여 정확히 사용할 수 있는 도와 멀티패러다임의 강력한 장점을 이해도록 돕는다.
타입스크립트로 설명되어 있어 사용해보지 않은 분들은 예시 코드의 이해가 조금은 어려울 수 있지만 각 챕터별 개념을 먼저 이해해보는 것도 추천한다.
다양한 서비스를 개발하면서 여러 상황에 따라 객제치향, 함수형, 명령형 프로그램 기법을 적절히 활용한다면 유연하고 완성도 있는 코드를 작성할 수 있을 것이라고 이 책을 읽으면서 생각이 들었다.