Post

함수형 프로그래밍

6. 함수형 프로그래밍

정수를 제곱하기

자바 프로그램은 가변 변수를 사용하는데, 함수형 프로그래밍에서는 가변 변수를 사용하지 않는다.

함수형 언어에서 변수는 변경되지 않는다.

불변성과 아키텍처

경합(race) 조건, 교착상태(deadlock), 동시 업데이트(concurrent update) 문제가 모두 가변 변수로 인해 발생

동시성 애플리케이션에서 마주하는 모든 문제는 가변 변수가 없다면 절대로 생기지 않는다.

불변성은 저장 공간이 무한하고 프로세서의 속도가 무한히 빠르다고 가정하면 실현 가능

자원이 무한대가 아니라면 타협이 필요

가변성의 분리

가장 중요한 타협 중 하나는 가변 컴포넌트와 불변 컴포넌트로 분리하는 일

불변 컴포넌트에서는 순수하게 함수형 방식으로만 작업이 처리되며, 어떤 가변변수도 혀용하지 않음

상태 변경은 컴포넌트를 갖가지 동시성 문제에 노출하는 꼴이므로, 트랜잭션 메모리와 같은 실천법을 적용하여 가변 변수를 보호한다.

트랜잭션 메모리는 트랜잭션을 사용하거나 재시도 기법을 통해 변수를 보호

애플리케이션을 제대로 구조화하려면 변수를 변경하는 컴포넌트와 변경하지 않는 컴포넌트를 분리해야 함

그리고 가변 변수들을 보호하는 적절한 수단을 동원해 뒷받침해야 한다.

가능한 한 많은 처리를 불변 컴포넌트로 옮기고, 가변 컴포넌트에서는 가능한 한 많은 코드를 빼내야 한다.

이벤트 소싱

더 많은 메모리를 확보할수록, 기계가 더 빨라질수록, 필요한 가변상태는 적어짐

이벤트 소싱은 상태가 아닌 트랜잭션을 저장하자는 전략

저장 공간과 처리 능력이 충분하면 애플리케이션이 완전한 불변성을 갖도록 만들 수 있고, 따라서 완전한 함수형으로 만들 수 있다.

ex. 소스 코드 버전 관리 시스템

참조

  1. 클린 아키텍처(Clean Architecture)
This post is licensed under CC BY 4.0 by the author.