본문 바로가기
Architecture

[Clean Architecture 정리] 6장. 함수형 프로그래밍

by 테리는당근을좋아해 2022. 7. 17.

함수형 프로그래밍(Functional Programming)

함수형 프로그래밍(FP, Functional Programming)

- 람다 계산법이 패러다임의 기반

- 함수형 프로그래밍에서 변수는 변하지 않는다(불변성)

 

 

불변성과 아키텍처

- 멀티 스레드 또는 프로세스에서 발생하는 경합 조건(race condition), 교착 상태(deadlock),  동시 업데이트(concurrent update) 등의 문제들은 변수의 가변성으로 인해 발생

- 불변성이 실현 가능한지는 저장 공간과 프로세서의 속도가 무한하다는 가정 하에 긍정적일 수 있다

- 따라서, 불변성은 저장 공간과 프로세서 속도와의 타협이 필요하다

 

 

가변성의 분리

- 불변성의 타협 포인트 중 중요한 하나는 서비스 내 컴포넌트 중 '가변 컴포넌트'와 '불변 컴포넌트'로 분리하는 것

- 불변 컴포넌트는 가변 변수를 사용하지 않으며, 순수하게 함수형 방식으로만 작업 처리

- 불변 컴포넌트는 순수 함수형 컴포넌트가 아닌 다른 컴포넌트와 서로 통신

- 상태 변경은 트랜잭션 메모리(transactional memory)와 같은 기법을 사용해 concurrent update, race condition으로 부터 가변 변수를 보호

- 애플리케이션을 제대로 구조화하기 위해서는 가변 컴포넌트와 불변 컴포넌트를 분리하고 가변 변수들을 보호할 적절한 수단을 동원해야 한다

 

 

이벤트 소싱(Event sourcing)

- 어떤 서비스를 불변 컴포넌트로만 동작하기 위해서 무한한 저장 공간과 처리 능력이 필요할 때, 영원히 동작하기 보다는 애플리케이션의 수명주기 동안만 문제없이 돌아가도록 한다면 훨씬 적은 저장 공간과 처리 능력이 요구될 수 있다.

- 이러한 발상이 기본이 되는 전략이 이벤트 소싱 

- 상태가 아닌 트랜잭션을 저장하는 전략

- 상태가 필요해지면 단순히 상태의 시작점부터 모든 트랜잭션을 처리한다.

 

 

패러다임

- 구조적 프로그래밍은 "제어흐름의 직접적인 전환에 부과되는 규율"

- 객체 지향 프로그래밍은 "제어흐름의 간접적인 전환에 부과되는 규율"

- 함수형 프로그래밍은 "변수 할당에 부과되는 규율"

- 각 패러다임은 코드를 작성하는 방식의 형태를 한정시킨다

 

서적 : http://www.yes24.com/Product/Goods/77283734

 

클린 아키텍처 - YES24

살아있는 전설이 들려주는 실용적인 소프트웨어 아키텍처 원칙『클린 코드』와 『클린 코더』의 저자이자 전설적인 소프트웨어 장인인 로버트 C. 마틴은 이 책 『클린 아키텍처』에서 이러한

www.yes24.com

 

댓글