쏙쏙 들어오는 함수형 코딩 1장. 함수형 사고와 코드의 세 가지 분류 방식

함수형 사고와 함수형 코드의 세 가지 분류에 대해 간략하게 알아봅니다.

cover-image

함수형 프로그래밍 읽고 정리하기

함수형 프로그래밍의 정의

먼저 부수 효과와 순수 함수의 용어 정의를 먼저 알아보자면 다음과 같습니다.

  • 부수 효과 : 함수가 리턴값 이외에 하는 모든 일, 함수의 인자에 근거해서 리턴값을 내는 순수 함수의 역할 외에 발생하는 동작. 함수에 부수 효과가 포함되어 있을 때, 부수 효과는 함수를 부를 때마다 발생하게 됨.

  • 순수 함수 : 함수의 인자에만 의존하고 부수 효과가 없는 말 그대로 순수한 함수. 같은 인자를 넣으면 항상 같은 결과를 돌려줌.

위키피디아에서 발췌한 함수형 프로그래밍의 정의는 다음과 같습니다.

  1. 수학 함수를 사용하고 부수 효과 (Side Effect) 를 피하는 것이 특징인 프로그래밍 패러다임

  2. 부수 효과 없이 순수 함수 만 사용하는 프로그래밍 스타일

함수형 프로그래밍 정의의 문제점

학문적으로는 가치가 있는 정의 이지만 정의의 일부를 비틀어 보는 것이 실제 프로그래밍을 하는 개발자의 입장에서는 다음과 같은 이유로 필요합니다.

  1. 부수 효과는 필요합니다

    ➡️ 부수효과 없는 소프트웨어는 없습니다. 부수 효과를 완전히 쓰지 말라는 것이 아닌 필요할 때는 써야 합니다.

  2. 함수형 프로그래밍은 부수 효과를 잘 다룰 수 있습니다.

    ➡️ 마찬가지로 정의에는 순수 함수만 쓰라는 것처럼 되어 있지만 순수하지 않은 함수를 잘 다룰 수 있는 기술을 적용해서 사용할 수 있습니다.

  3. 함수형 프로그래밍은 실용적입니다.

    ➡️ 함수형 프로그래밍을 학문적 지식이 아닌 기술과 개념으로 보기 위해 함수형 코드의 세 가지 분류에 대해 알아야 합니다.

함수형 프로그래밍의 기본 개념 ➡️ 코드를 액션과 계산, 데이터로 구분하기

액션 : 실행 시점이나 횟수 또는 그 둘다에 의존합니다. 언제, 얼만큼 호출하는지가 중요하기 때문에 부르는 시점과 횟수에 유의해야 합니다.

> 예: sendEmail (이메일 보내기), saveUserDB (데이터저장)

계산 : 입력값을 계산해 출력하는 것. 데이터와 달리 실행이 가능. 실행하기 전까지 어떻게 동작할지 알 수 없다는 것이 데이터와 차이. 언제 어디서 계산해도 결과는 같고 외부에 영향을 주지 않음.

> 예 : sum(numbers), string_length(str)

데이터 : 정적이고 보이는 그대로의, 이벤트에 대해 기록한 사실이며 실행하지 않아도 데이터 자체로 의미가 있습니다.

{
    "firstName" : "Dotori",
    "lastName" : "Jung"
}

액션, 계산, 데이터를 구분했을 때의 장점

여러 컴퓨터가 네트워크를 통해 통신하기 시작하면 소프트웨어가 복잡해지고, 시간에 따라 바뀌는 값을 모델링 할 때 동작 방법을 이해하는 것은 중요하지만 쉽지 않습니다.

실행 시점이나 횟수에 의존하는 코드를 없애면, 코드를 더 쉽게 이해할 수 있고 버그를 막을 수 있습니다.

  • 데이터와 계산은 실행 시점이나 횟수에 의존하지 않으므로 코드를 데이터와 계산으로 바꿀 수록 여러 가지 문제를 해결할 수 있습니다.

  • 액션은 실행 시점과 횟수에 의존하기 때문에 코드 전체에 영향을 주지 않도록 격리시키거나, 액션으로 작성한 코드를 계산으로 옮기면 액션도 다루기 쉬워집니다. (혹은 다른 기술이 있을 듯)

이전 블로그로
다음 블로그로