Thief of Wealth

- 함수형 프로그래밍

: 부수 효과를 없애고 순수 함수를 만들어 모듈화 수준을 높이는 프로그래밍 패러다임

: 명령형이 아닌 선언형 프로그래밍 방식

 

- 부수 효과

: 외부의 상태를 변경하는 것 또는 함수로 들어온 인자의 상태를 직접 변경하는 것.

 

- 순수 함수 

: 부수 효과가 없는 함수. 즉, 어떤 함수에 동일한 인자를 주었을 때 항상 같은 값을 리턴하는 함수 (= 외부의 상태를 변경하지 않는 함수)

(=외부의 상태를 변경하지 않으면서, 동일한 인자에 대해 항상 똑같은 값을 리턴하는 함수)

 

- 함수형 프로그래밍은 왜 필요한가?

: 간단한 프로그램을 작성하더라도, 코드 100줄은 쉽게 넘어간다.

하지만 그 100줄 안에 담긴 변수, 함수들이 서로 연관되어 있다면, 에러가 1개여도, 100줄의 코드를 모두 다 체크해야하는 상황이 발생할 수 있다.

또한, 그 에러를 고치더라도, 왜 에러가 고쳐진건지, 다른 에러가 없는지에 대한 신뢰성도 낮을 수 있다.

그래서 나온것이 함수형 프로그래밍이다!

 

input이 같으면 output이 일정한 순수함수로 프로그래밍을 했기 떄문에 예상하지 못한 output이 나왔을 때, input만 점검하면된다.

그 input값 역시 다른 순수함수의 output이라면 그 순수함수를 확인해보면 된다.

즉, 전체의 코드를 모두 점검할 필요가 없어진다.

 

 

- 함수형 프로그래밍 특징

1. 동시성 프로그래밍

: 명령형 프로그래밍에서는 멀티 스레드를 사용하는 도중, 사용하는 자원이 겹치고, 그 자원의 상태가 변경되는 경우 예상치못한 side effect가 생길 수 있다. 그러나 함수형 프로그래밍은 모든 데이터가 변경 불가능하고, 부수효과를 가지고 있지 않기 때문에 여러 스레드가 동시에 공유 데이터에 접근하더라도 동시성과 관련된 문제를 원천적으로 봉쇄한다.

2. 함수는 입력과 그에 따른 출력만 존재한다.

: 함수는 내부적으로 어떠한 상태값도 가지지 않으며, 입력에 대한 출력만을 책임질 뿐이므로, 코드를 테스트하기가 쉽고, 함수가 하는 일이 명확하기 때문에 함수의 정체성을 더 의미있게 정할 수 있고, 가독성이 높아진다.

3. 고차함수의 사용

: 고차함수를 사용함으로써 좀 더, 선언형 프로그래밍에 맞는 사고를 할 수 있는데, 이를 통해 좀 더 간결한 코드가 작성되고, 함수들의 결합, 조합이 쉬워질 수 있으며, 익명할 수를 사용할 수 있다.

 

- 함수형 프로그래밍 단점

1. 순수함수를 구현하기 위해 코드의 가독성이 좋지 않을 수 있다.

2. 함수형 프로그래밍에서는 반복을 for이 아닌 재귀를 통해서 이루어지는데, 재귀적 코드 스타일은 무한루프에 빠질 수 있다.

3. 순수함수를 쓰는 건 쉬워질 수 있지만, 그것을 조합하는 것은 쉽지 않다.

 

 

 

 

profile on loading

Loading...