함수형 프로그래밍
함수형 프로그래밍은 변수의 변경을 최소화하고, 가능한 한 순수 함수로만 구성된 프로그램을 설계하려는 패러다임이다.
불변성이란?
한 번 생성된 데이터는 절대 변경되지 않는다는 성질을 말한다.
즉, 값을 바꾸는 것이 아니라 새로운 값을 생성함으로써 상태를 갱신하는 방식을 택한다.
가변 변수가 없다면 절대 생기지 않는 문제들이 있다.
동시성 환경에서의 문제들이 대표적이다.
불변성을 지키기 위한 두 가지 전략
1. 가변성 분리
애플리케이션 또는 그 내부의 서비스를 불변 컴포넌트와 가변 컴포넌트로 나눈다.
- 불변 컴포넌트: 상태 변경 없이 순수 함수 방식으로 동작. 가변 변수 사용 금지. 다른 컴포넌트와의 통신을 통해 값 전달.
- 가변 컴포넌트: 상태 변경이 가능한 컴포넌트. 트랜잭션 메모리를 통해 동시성 문제를 제어.
- 트랜잭션 메모리는 데이터베이스 트랜잭션처럼 메모리에서도 변수의 변경을 일관성 있게 처리할 수 있도록 해준다.
2. 이벤트 소싱(Event Sourcing)
상태 그 자체를 저장하지 않고, 상태의 모든 변경 사항 트랜젝션(이벤트)을 저장한다.
- 장점: 가변 변수가 전혀 필요 없다.
- 단점: 시간이 지날수록 처리해야 할 이벤트가 많아짐 → 성능 저하 우려
해결책: 일정 주기(예: 자정)에 마지막 상태를 저장해, 새로운 시작점으로 삼는다.
이 방식은 버전 관리 시스템(Git 등)과 유사하다.
결론: 함수형 프로그래밍은 '변수'에 대한 규율이다
함수형 프로그래밍은 단순히 "함수를 잘 쓰자"는 개념이 아니다.
'변수의 상태 변경을 어떻게 제한할 것인가'에 대한 아키텍처 수준의 고민이다.
※ 본 글은 『Clean Architecture』(로버트 C. 마틴 저) 2부의 6장을 기반으로 학습 목적으로 요약한 글입니다.
※ 이 글은 책의 내용을 요약한 것으로, 원문 없이 읽을 경우 오해의 여지가 있을 수 있습니다. 정확한 이해를 위해 원서의 정독을 권장합니다.
'아키텍처' 카테고리의 다른 글
Clean Architecture 정리 - 3부 8장 개방-폐쇄 원칙 (3) | 2025.06.12 |
---|---|
Clean Architecture 정리 - 3부 7장 단일 책임 원칙 (0) | 2025.06.10 |
Clean Architecture 정리 - 2부 5장 객체지향 프로그래밍 (1) | 2025.06.08 |
Clean Architecture 정리 - 2부 3, 4장 (0) | 2025.06.01 |
Clean Architecture 정리 - 1부 소개 (0) | 2025.05.11 |