프로그래밍 그 자체보다 앞서 등장
클로저 언어와 함수형 프로그래밍이 무엇인지 배우는 시간은 스스로 갖도록 하자
클로저 프로그램에서는 이러한 가변 변수가 전혀 없음. 함수형 언어에서 변수는 변경되지 않는다.
→경합조건, 교착상태, 동시 업데이트 문제가 모두 가변 변수로 인해 발생하기 때문이다. 동시성 애플리케이션에서 마주치는 모든 문제, 즉 다수의 스레드와 프로세스를 사용하는 애플리케이션에서 마주치는 모든 문제는 가변 변수가 없다면 절대로 생기지 않는다.
가변성의 분리
애플리케이션의 내부 서비스를 가변 컴포넌트와 불변 컴포넌트로 분리하는 일. 불변 컴포넌트는 변수의 상태를 변경할 수 있는, 즉 순수형 컴포터는가 아닌 하나 이상의 다른 컴포넌트와 서로 통신한다. 상태 변경은 갖가지 동시성 문제에 노출하는 것으로, 트랜잭션 메모리와 같은 실천법을 사용하여 동시 업데이트와 경합 조건 문제로부터 가변 변수를 보호한다. CAS(compare and swap) 알고리즘을 전략으로 사용함( cpu에서 cas를 기본연산으로 제공하여 안전하게 계산? 하는 기법인 것으로 알고 있음). 가능한 많은 처리를 불변 컴포넌트로 옮겨야 하며, 가변 컴포넌트에서는 가능한 많은 코드를 빼내야 한다.
이벤트 소싱
가변 변수 대신에 트랜잭션을 사용하는 방식. 이러한 방법은 자원을 많이 사용하겠지만, 애플리케이션의 수명 주기 동안만 문제없이 동작할 정도의 저장 공간과 처리 능력만 있으면 충분할 것이다 .( 지름길 →매 자정마다 상태를 계산한 후 저장하는 것 → 은행이 하는일)
결론
패러다임은 모두 우리에게 무언가를 앗아갔음. 구조적 프로그래밍은 제어흐름의 직접적인 전환에 부과되는 규율(goto를 앗아감). 객체 지향 프로그래밍은 제어흐름의 간접적인 전환에 부과되는 규율(함수 포인터를 앗아감). 함수형 프로그래밍은 변수 할당에 부과되는 규율. 지난 반세기 동안 배운 것은 해서는 안 되는 것에 대해서다. 도구는 달라졌고, 하드웨어도 변했지만, 소프트웨어의 핵심은 여전히 그대로다. 컴퓨터 프로그램은 순차, 분기, 반복, 참조로 구성된다. 그 이상 그 이하도 아니다.
'공부기록 > 아키텍처' 카테고리의 다른 글
더블 디스패치 (0) | 2021.10.31 |
---|---|
클린 아키텍처 7장~11장 SOLID (0) | 2021.07.26 |
클린 아키텍처 5장 - 객체 지향 프로그래밍 (0) | 2021.07.23 |
클린 아키텍처 4장 - 구조적 프로그래밍 (0) | 2021.07.22 |
클린 아키텍처 3장 (0) | 2021.07.21 |