본문 바로가기

Study/JavaScript

[JavaScript] 함수형 프로그래밍(2)

이전 포스팅에서 "쏙쏙 들어오는 함수형 코딩"이라는 책을 소개하였고, 이제 두번째 파트로 이어나간다.

 

 

 

[JavaScript] 함수형 프로그래밍(1)

요즘 흥미롭게 읽고 있는 책이 하나 있는데, 함수형 프로그래밍에 대해 알려주는 책이다. 무슨 개발이 되었든 함수를 사용하여 코드를 작성해두면 어떤 로직을 재사용하기 편리한 것 같다. 가령

beautify-log.tistory.com

 


 

기존에 있는 코드에 함수형 프로그래밍을 적용시킬 수 있다. 코드를 읽을 때 액션, 계산, 데이터 관점으로 읽는 연습이 필요하다.

 

function figurePayout(affiliate) {
    let owed = affiliate.sales * affiliate.commissions;
    if (owed > 100) {
        sendPayout(affiliate.bank_code, owed);	// 액션??
    }
}

function affiliatePayout(affiliate) {
    for (const a of affiliate) {
        figurePayout(a);
    }
}

function main(affiliate) {
    affiliatePayout(affiliate);
}

 

책에서 제나라는 사람이 함수형 코드라고 작성해둔 것인데, 이는 함수형 코드라고 하기 어렵다. 그리고 figurePayout 함수의 if 조건문 안에 있는 함수의 호출 하나만을 액션으로 보고 있는데 여기서 액션은 하나가 아니다.

 

함수 안에서 액션을 하나라도 호출한다면 그 함수 전체가 액션이 된다. figurePayout 함수는 액션인 sendPayout 함수를 호출한다. 그러므로 figurePayout 함수는 sendPayout의 호출 시점과 횟수에 의존하므로 figurePayout 함수 전체가 액션이 된다.

 

마찬가지로 affiliatePayout 함수 안에서 figurePayout의 호출도 그 시점과 횟수에 의존하므로 affiliatePayout 함수 전체가 액션이다.

 

main 함수도 이와 같다.

 


 

액션은 코드 전체로 퍼진다. 액션을 부르는 함수가 있을 때 그 함수 자체가 액션이 되고, 그 함수를 부르는 다른 함수도 마찬가지로 액션이다. 이처럼 액션은 코드 전체로 퍼질 수 있다. 때문에 함수형 프로그래밍에서 액션을 가급적 사용하지 않으려 하는 경향이 있다고 본다.

 

액션은 다양한 형태로 나타나는데, 함수를 호출할 때 우리가 브라우저에서 alert를 호출하여 팝업창이 뜨는 것은 액션이다.

 

메소드를 호출할 때, console.log를 사용하여 콘솔에 무언가 출력하는 것 또한 액션이다.

 

변수, 객체의 속성, 배열의 인덱스를 참조하는 것 또한 액션으로 볼 수 있다. 변수는 공유되고, 변경가능하다면 읽는 시점에 따라 값이 달라질 수 있기 때문이다. 객체도 마찬가지로 공유, 변경하능한 객체라면 참조하는 시점에 따라 값이 바뀐다. 배열도 마찬가지다.

 

객체에서 어떤 속성을 삭제할 때 delete를 사용하는데, 다른 코드에 영향을 줄 수 있기 때문에 이 또한 액션이다.

 


 

정리하면 액션은 실행 순서와 시점, 횟수에 의존적이다. 자바스크립트에서 액션은 함수로 구현하고 계산 또한 함수로 구현한다. 그렇기 때문에 구분하기 다소 어려울 수 있다.

 

이 책에서 액션은 외부 세계에 영향을 주거나 받는 것을 말한다고 정의하고 있다.

 

이메일을 보내거나, 계좌에서 현금을 인출하는 행위, 전역변숫값을 바꾸는 것, AJAX 요청을 보내는 것을 액션의 예시로 들고 있다.

 


 

액션은 가급적 적게 사용하는 것이 중요하다. 전혀 쓰지 않을 수 없으나 액션 대신 계산을 사용할 수 있다면 계산을 사용하는 편이 낫다.

 

액션은 가능한 작게 만든다. 관련없는 코드는 모두 지운다. 액션에서 결정이나 계획과 관련된 내용은 계산으로 뺄 수 있다.

 

내부에 계산과 데이터만 있고 가장 바깥 쪽에 액션이 있는 구조가 이상적이다.

 

액션이 호출 시점에 의존하는 것을 제한할 필요가 있다.

 

 

 

 

 

출처

에릭 노먼드(2022). 쏙쏙 들어오는 함수형 코딩. 파주: 제이펍