본문 바로가기
프로그래밍/golang

함수형 코딩1 - 부수효과, 액션, 계산, 데이터

by 나도한강뷰 2022. 9. 22.

함수형 코딩의 슬로건은 '부수효과(side effect)를 없애라'는 것이다. A라는 일을 하면서 내가 생각한 A외에 다른것에 영향을 주는 요소를 없애는 것이 함수형 코딩의 포인트이다.

 

그러한 관점으로 인해서 함수형 코딩은 코드를 3가지로 구분하게 된다.

  1.  액션 - 호출 횟수와 호출 시점에 의존하여서, 결과값이 영향을 받는 것
  2.  계산 - 호출 횟수와 시점에 영향을 받지않고, 다른곳에 영향을 주지 않는 것(입력만으로 출력을 계산)
  3.  데이터 - 변경 불가능한 데이터, 어떤 사건에 대한 사실

이렇게 분류가 되어있는데, 어느 코드를 보건 대부분 액션은 많지만 계산은 거의 찾아 볼 수 없다. 왜냐면 계산은 액션속에 숨겨져 있는 경우가 많기 때문이다.(+ 액션을 호출하면 그 호출한 함수도 액션이 되기때문에 그렇기도 하다.) 그렇기에, 함수형 코딩을 하기위해서는 액션을 계산과 데이터로 나누고, 나누고... 적당할때까지 나누는게 중요하다.

 

부수효과를 다루기 위해서,

  1. 우리는 액션에서 계산을 빼내는 것을 항상 고려해야된다. 왜냐면, 그래야지 영향을 주는것과 아닌것을 명확하게 구분하게되고, 우리가 무엇을 컨트롤해야되는지 이해할 수 있기때문이다.
  2. 액션의 암묵적인 input과 output을 제거하고 명시적으로 변경해야된다. 왜냐면, 그래야지 액션에 대해서 명확하게 이해할 수 있기때문이다. 이 액션에 명시적으로 input과 output이 나와있지 않으면, 해당 함수를 이용할때마다, 그 함수를 까보는 수고를 가져가야되고, 그 행위조차 명확하지 않을 가능성이 높아진다.
  3. global variable을 직접적으로 건들이지 않으며, 그걸 local variable화 시켜야된다. 그래야지 내부의 조작이 의도치않게  외부에 전달되지 않을것이기 때문이다.(이것으로 책에서는 copy-on-write를 제안하고 있다.)