📖 [6장] 함수형 프로그래밍

📘 클린 아키텍처 북스터디 정리입니다

📚 도서: 로버트 C. 마틴 《Clean Architecture》
🧑‍💻 목적: 올바른 설계에 대한 감각과 습관을 익히기 위해
🗓️ 진행 기간: 2025년 7월 ~ 매주 2장


✅ 핵심 요약 (Key Takeaways)

이 장의 핵심 문장은?

앱을 제대로 구조화하려면 변수를 변경하는 컴포넌트와 변경하지 않는 컴포넌트를 분리해야 한다는 것이다.
현명한 아키텍트라면 가능한 한 많은 처리를 불변 컴포넌트로 옮겨야 하고, 가변 컴포넌트에서는 가능한 한 많은 코드를 빼내야 한다

저자가 전달하고자 하는 메세지 요약

  • 함수형 프로그래밍은 단순한 코드 스타일이 아닌, 불변성과 순수 함수, 그리고 시스템 아키텍처 전반에 영향을 주는 설계 철학
  • 가능한 많은 로직을 불변 컴포넌트로 이동시키고, 가변성과 상태 변경을 최소화하는 것이 유지보수성과 안정성을 높이는 핵심 원칙임

💡 내용 정리

서론

  • 함수형 프로그래밍이라는 개념은 여러 가지 의미로, 프로그래밍 그 자체보다 앞서 등장한 철학임
  • 함수형 프로그래밍의 핵심 기반: 람다 계산법(1930년대, 알론조 처치)

불변성과 아키텍처

변수의 가변성 문제

  • 많은 소프트웨어 문제들은 가변변수로 인해 발생함
  • 대표 사례: 경합 조건, 교착 상태, 동시성 문제

동시성 문제

  • 실제 환경에서는 성능과 저장공간의 제약으로 인해 완벽한 불변성을 실현하기는 어려움
  • 현실과 타협이 필요한 부분이 존재

가변성의 분리

가변 컴포넌트와 불변 컴포넌트로 분리

  • 시스템을 구조화할 때는 가변 컴포넌트와 불변 컴포넌트를 명확히 분리해야 함
    - 가변 컴포넌트: 상태를 변경하는 책임을 가진 부분
    - 불변 컴포넌트: 순수 함수형 방식으로만 처리하며 상태 변경을 갖지 않는 부분
  • 가능한 한 많은 비즈니스 로직을 불변 컴포넌트로 옮기는 것이 좋음

이벤트 소싱

  • 일반적인 운영 환경에서는 일정 수준의 저장공간과 처리 능력으로도 충분히 이벤트를 다룰 수 있음
  • 이벤트 소싱: 상태가 아닌 이벤트(트랜잭션)을 저장하자는 전략. 상태가 필요해지는 시점에 재생산
  • 이벤트 소싱 전략에서는 데이터 저장소에서 데이터 삭제/변경이 발생하지 않으며, CRUD가 아닌 CR 방식으로만 수행
  • 저장 공간과 처리 능력이 충분하면 앱이 완전한 불변성을 갖도록 만들 수 있음
    → 완전함 함수형 프로그래밍 가능

💡 인상 깊었던 문장 & 나의 인사이트

책에서 가장 기억에 남는 문장

앱을 제대로 구조화하려면 변수를 변경하는 컴포넌트와 변경하지 않는 컴포넌트를 분리해야 한다는 것이다.
현명한 아키텍트라면 가능한 한 많은 처리를 불변 컴포넌트로 옮겨야 하고, 가변 컴포넌트에서는 가능한 한 많은 코드를 빼내야 한다

인상 깊었던 문장과 관련된 인사이트

최근에 진행한 자바 프로젝트에서 class 대신 record를 많이 썼다.

사실 함수형 프로그래밍이나 불변성이라는 개념을 깊이 이해하지 못한 채,
record가 불변성을 지원하니까 좋다는 얘기만 듣고 별다른 고민 없이 사용했었다.

이번 챕터를 읽으면서, 그때가 떠올라 다시 찾아봤다.
찾아보니 자바의 record는 객체지향 언어인 자바가 함수형 패러다임의 핵심 가치인 불변성을 부분적으로 수용한 문법적 장치라고 한다.

이전에는 모르고 썼지만, 이제는 그 의미를 알고, 의도적으로 활용할 수 있을 것 같아 기대가 된다


🛠 실무 적용 아이디어 (To Action)

✅ 오늘부터 실천할 작은 실천

  • 반드시 가변 컴포넌트에 작성되어야 할 필요가 없다면 불변 컴포넌트에 코드 작성하기

0개의 댓글