[리뷰] 멀티패러다임 프로그래밍
읽게 된 계기
백엔드 개발도 하긴 하지만, 프론트엔드 개발을 주로 하다보니 함수형 프로그래밍에 익숙해져 객체지향 패러다임은 잘 활용하지 않았다. 자바스크립트에서 class를 이용해 객체지향적으로 개발을 할 수 있다는 사실을 알고 있음에도, 막상 프론트엔드 개발을 할 때는 잘 사용하지 않으니 그 필요성과 활용 방법에 대해 잘 알지 못했다. 그러던 중 멀티패러다임을 활용해 적재적소에 객체지향과 함수형을 활용하며 개발을 할 수는 없을까? 라는 생각이 들었고, 책을 읽게 되었다.
멀티패러다임이라는 것은 무엇이라고 딱 정의된 개념이 아니다.
그러나 이 책은 우선 객체지향 패러다임의 반복자 패턴과 함수형 패러다임의 일급 함수(함수를 변수에 할당하고, 함수의 인자로 받을 수 있음)가 만나 map, filter, reduce 등의 리스트 프로세싱(리스트 형태의 데이터를 처리하는 기법) 함수를 만들며 멀티패러다임을 발전시켰다고 설명한다.
자바스크립트로 개발을 하지만 filter, map, reduce 등의 메서드에는 익숙하지 않았다. for문으로도 충분히 구현이 가능하니까, 혹은 메서드에 대해 잘 몰라서가 그 이유였다. 그러나 이 책을 읽고, 자바스크립트에서 이런 메서드를 사용하면 코드가 훨씬 가독성이 좋아지고, 코드의 내용을 이해하기 쉽다는 것을 알게 되었다.
책의 특징
원하는 부분만 골라읽기보다는 처음부터 쭉 읽으며 코드도 따라 쳐보고, 확실히 이해하고 넘어가야 다음 내용을 이해할 수 있다.
앞 챕터에서 구현한 코드를 기반으로 다음 챕터장에서 새로운 기능을 구현하기 때문이다. 또한 7장에서는 6장에서 만든 코드와 rune-ts라는 라이브러리를 이용해서 예제 코드가 구성되기 때문에, 꼼꼼하게 읽지 않으면 이해가 조금 어려울 수 있다.
프론트엔드에서 멀티패러다임 개발하기
3개의 toggle이 있는 컴포넌트를 구현할 때, 어떻게 구현할 수 있을까? 보통의 리액트 개발자라면 토글 3개를 만든 후 개별적으로 토글의 상태를 관리할 것이다. 그런데 여기서 모든 토글을 끄거나 켤 때는 어떻게 구현해야할까? 하드코딩으로 토글의 상태를 개별적으로 확인한 후 변경하거나 for문으로 처리할 수 있다.
그러나 책에서는 토글 리스트를 listView로 저장해두고, filter로 원하는 항목만 필터링한 후 forEach를 사용해 setOn을 호출하는 방식으로 불필요한 리렌더링 줄이는 방법을 소개한다.
또한 프론트엔드 개발에서 데코레이터를 활용해 로직을 단순화하고 코드 가독성을 높이는 방법을 소개한다.
nestjs로 백엔드 개발을 하며 데코레이터를 처음 접하고, 데코레이터를 프론트엔드 개발에도 활용할 수 없을까 고민했던 적이 있다. 아쉽게도 데코레이터는 클래스를 기반으로 작동하고 프론트엔드 개발은 대부분 함수형으로 이루어져 실제로 적용해보지는 못했는데, 데코레이터를 이용해 프론트엔드에서 이벤트 등록 로직을 구현해서 반갑고 신기했다. 책의 예제에서는 rune-ts 라이브러리를 이용하여 구현하는데, 내가 사용하는 리액트에서도 컴포넌트를 클래스로 만들 수 있으니 데코레이터를 활용해볼 수 있을 것 같다.
결론
구조 문제는 객체지향으로, 로직 문제는 함수형으로 해결하는 것이 좋다는 것을 알게 되었다. 어떤 상황에서 객체지향적으로 개발하고, 어떤 상황에서 함수형으로 개발해야할지 고민이 많았는데, 이 책을 읽고 그 고민의 답을 얻게 되었다. 나와 같이 비슷한 고민을 했던 사람들에게 이 책을 추천한다.
한빛미디어의 도서 지원을 받아 작성한 리뷰입니다.