[책 스터디] 쏙쏙 들어오는 함수형 코딩 – 액션, 계산, 데이터

Hwang Tae Young·2025년 4월 7일
0

스터디 두 번째 책으로 "쏙쏙 들어오는 함수형 코딩"을 시작했다.
주변 사람들로부터 읽으면 도움이 많이 될거라는 이야기를 많이 들어서, 기대를 하고 읽었는데 너무 재밌게 읽은 것 같다.

이번 글에서는 챕터 3까지 읽고 기억에 남았던 개념인
액션(Action), 계산(Calculation), 데이터(Data)에 대해 정리해본다.

📌 액션, 계산, 데이터란?

액션 (Action)계산 (Calculation)데이터 (Data)
정의실행 시점과 횟수에 의존입력을 받아 출력을 만드는 순수한 함수이벤트에 대한 사실, 변하지 않는 값
예시이메일 보내기, 데이터베이스 읽기최댓값 찾기, 이메일 주소 검사사용자가 입력한 이메일 주소, 은행 API로 읽은 달러 수량
입력 동일 → 결과 동일✅ 항상 같다✅ 항상 같다❌ 항상 같지 않음 (실행 횟수 등 영향 받음)
부수 효과✅ 있음❌ 없음❌ 없음

표를 기준으로 각 개념을 정리해보면 다음과 같다.

  • 액션 : 실행 시점이나 횟수에 따라 결과가 달라질 수 있기에, 예측이 어렵고 부수 효과가 있다.
  • 계산 : 입력값이 같으면 항상 같은 결과가 나오는 순수 함수이기 때문에 예측하기가 쉽다.
  • 데이터 : 어떤 이벤트의 결과로 나온 사실을 의미하며, 변경되지 않는 값이다.

계산과 데이터는 금방 감이 왔는데, 액션이 항상 부수 효과를 가지는지에 대해서는 헷갈렸다.


📌 액션의 형태

책에서는 우리가 흔히 사용하는 다음과 같은 코드들을 액션으로 분류한다.

// 함수 호출
alert('Hello world!'); // 팝업이 뜨니까 액션

// 메서드 호출
console.log("hello"); // 콘솔 출력도 액션

// 생성자
new Date(); // 호출 시점마다 값이 달라지므로 액션

// 표현식
y
user.first_name
stack[0]

이런 참조 표현들도 전역 상태나 외부 값에 의존하고, 그 값이 변경 가능하다면, 참조하는 시점마다 결과가 달라질 수 있어서 액션으로 분류된다고 한다.

요약하면, "호출 시점에 따라 값이 달라지거나 어떤 행위 자체가 일어나는 것"을 액션이라고 보면 될 것 같다. 즉 모든 액션이 부수 효과를 가지고 있는 것은 아니다.

대부분의 액션은 외부 상태와 관련이 되어 있어서 헷갈렸던 것 같다.


📌 액션 사용시 주의할 점

책의 예시에서 제나라는 개발자는 아래의 코드를 작성하면서 sendPayout만 액션이라고 생각했다.

function figurePayout(affiliate) {
  const owed = affiliate.sales * affiliate.commission;
  if (owed > 100)
    sendPayout(affiliate.bank_code, owed);
}

function affiliatePayout(affiliates) {
  for (let a = 0; a < affiliates.length; a++)
    figurePayout(affiliates[a]);
}

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

하지만 실제로는 main()함수가 실행되면, affiliatePayout() -> figurePayout() -> sendPayout() 흐름이 이어지고 함수가 실행된다.
최종적으로 액션이 실행된다면 그 액션으로 이어지는 모든 함수가 액션인 것이다.

이런 부분 때문에, 액션을 남발하는 건 좋지 않겠다는 생각이 들었다.


📌 챕터 3까지의 후기

항해 플러스에서 클린 코드 챕터를 진행했을 때와 비슷한 느낌을 받았는데, 이번 책은 그보다 훨씬 더 구체적이고 깊이 있는 개념들이 많다.

개념들이 단순하거나 쉽지는 않지만, 실제 코드에 적용해보면서 단순히 읽고 끝나는 것이 아니라 나만의 개발 틀을 만들어 가고 싶다.

profile
어제 보다 나아져보자...☆

0개의 댓글