반디북
쏙쏙 들어오는 함수형 코딩
Ch1
우석

1. 쏙쏙 들어오는 함수형 코딩에 오신 것을 환영합니다

함수형 프로그래밍이란?

  1. 수학 함수를 사용하여 부수 효과를 피하는 것이 특징인 프로그래밍 패러다임
  2. 부수 효과 없이 순수 함수만 사용하는 프로그래밍 스타일

함수형 프로그래밍의 정의이다. 부수 효과란 함수가 리턴 값 이외에 하는 모든 일을 말하고, 순수 함수는 인자에만 의존하고 부수 효과가 없는 함수를 뜻한다. 하지만 실용적인 측면에서 함수형 프로그래밍의 정의는 3가지 문제점이 존재한다.

  1. 부수 효과는 필요하다.
  2. 함수형 프로그래밍은 부수 효과를 잘 다룰 수 있다.
  3. 함수형 프로그래밍은 실용적이다.

지속적으로 언급되지만 함수형 프로그래밍은 개발 패러다임이다. 패러다임은 추상적인 개념이기 한 단어 속에는 여러 관점이 존재할 수 있다. 학문적인 함수형 프로그래밍도 있을 수 있고 현업에서 바라보는 함수형 프로그래밍도 있을 수 있다. 심지어는 두개의 큰 가지 속에서도 여러 관점으로 나뉠 것이다. 저자는 많은 관점들 중 실용적인 측면에서의 함수형 프로그래밍을 얘기하려 한다.


액션과 계산 그리고 데이터

함수형 프로그래밍을 하기 위해서는 함수형 사고를 연습해야 한다. 함수형 사고에는 2가지 큰 틀이 존재한다.

  1. 액션과 계산 그리고 데이터
  2. 일급 추상

1장에서는 액션과 계산 그리고 데이터에 대해 간단히 설명한다. 간단한 정의는 아래와 같다.

액션: 실행 시점이나 횟수 또는 둘 다에 의존하는 로직 (메일 발송, DB 저장 등..). 계산: 입력값으로 출력값을 만드는 로직. 언제 어디서 계산해도 결과는 같고 외부에 영향을 주지 않는다. (숫자 더하기). 데이터: 이벤트에 대한 상세한 기록.

객체지향 프로그래밍을 배울 때 상태 : 행동 = 필드 : 메서드를 배웠는데 비슷한 개념으로 느껴졌다. 하지만 함수형 프로그래밍에서는 행동을 액션과 계산 2가지로 나눈다. 함수형 프로그래밍의 지향점은 로직의 대부분을 계산으로 만들고 액션을 최대한 줄여 궁극적으로 액션을 보다 잘 관리하는 데에 있다고 말한다.


지금까지 개발을 하면서 메서드와 필드에 대해서만 생각했지 메서드를 2가지 유형으로 나누어 생각해본 적이 없어서 신선한 것 같다.

액션, 계산, 데이터를 구분해서 좋은 점

함수형 프로그래밍은 분산 시스템과 잘 어울린다. 분산 시스템에서는 여러 컴퓨터가 네트워크를 통해 통신하고 소프트웨어가 복잡해진다. 처리해야 하는 메시지 순서가 바뀔 수 있고 중복되기도 하고 유실되기도 한다. 이같이 시간에 따라 바뀌는 모델링을 할 때 함수형 프로그래밍을 통해 이와 같은 로직을 줄이는 건 시간에 따라 바뀌는 영역 (액션)을 보다 잘 다룰 수 있는 밑바탕이 된다.

만혁

쏙쏙 들어오는 함수형 코딩

함수형 프로그래밍이란?

함수형 프로그래밍을 한마디로 설명하는 것은 어렵다.

대충 요약하면

  1. 수학 함수를 사용한 부수효과를 피하는 것이 특징인 프로그래밍 패러다임
  2. 부수 효과 없이 순수함수만을 사용하는 프로그래밍 스타일

두개로 나뉜다.

개인적 체감으로는 함수형 프로그래밍을 말할때 대부분 두가지 유형으로 말하는것 같다.

  1. 카테고리 이론이 더해진 수학적 개념을 이용한 프로그래밍 방법론인지

  2. map 또는 filter를 사용하여 프로그래밍하는 스타일

두 가지 모두 함수형 프로그래밍을 뜻하지만 개인적으로는 1번을 알고 사용하는게 더 유연하고 확장성 사고를 하는데 도움이 된다고 생각~!~!

부수 효과(Side Effect)

함수가 리턴 값 이외에 하는 모든 일.

예를들어 I/O 작업과 같은 파일 읽기, API 요청하기 등등...

대부분의 함수형 프로그래밍에선 불필요한 부수 효과를 사용하지 않으려고 한다.

순수 함수

인자에만 의존하고 부수 효과가 없는 함수.

같은 인자를 넣으면 같은 결과를 돌려준다

실용적인 측면에서 함수형 프로그래밍 정의의 문제점

  1. 부수 효과는 필요하다 부수 효과는 소프트웨어를 실행하는 이유이다. 이메일 전송 서비스에서 이메일 전송을 못하면 의미가 없다

  2. 함수형 프로그래밍은 부수 효과를 잘 다룰 수 있다. 정의에는 순수 함수만 사용하는것 같지만 그렇지 않다.

  3. 함수형 프로그래밍은 실용적이다. 그렇다고 한다.

함수형 프로그래밍을 학문적 지식이 아닌 기술과 개념으로 보기

액션과 계산, 데이터 구분하기

  • 액션(Action) -> 부르는 시점에 의존
  • 계산(Caculation) -> 입력값을 계산해 출력하는 것
  • 데이터(Data) -> 이벤트에 대한 사실을 기록한 것

클라우드 서비스를 만든다고 생각해볼때 시나리오 동작 구분

  1. 사용자 작업 완료 표시를 함 UI 이벤트로 실행 횟수에 의존하기 때문에 액션

  2. 클라이언트가 서버로 메세지를 보냄 메세지를 보내는것 또한 액션. 메세지 자체는 데이터

  3. 서버가 메세지를 받음 메세지를 받는 것은 횟수에 의존하므로 액션

  4. 서버가 데이터베이스를 변경 내부 상태변경 또한 액션

  5. 서버가 누구에게 알림을 보낼지 결정 결정하는 것은 계산

  6. 서버가 이메일로 알림을 보냄 이메일 보내기는 액션

함수형 프로그래밍에서는 코드를 세 가지로 분류한다

  1. 액션(Action) -> 부르는 시점에 의존
  • 시간이 지남에 따라 안전하게 상태를 변경하는 방법
  • 순서를 보장하는 방법
  • 액션이 정확히 한 번만 실행되게 보장하는 방법
  1. 계산(Caculation) -> 입력값을 계산해 출력하는 것
  • 정확성을 위한 정적 분석
  • 수학적 지식
  • 테스트 전략
  1. 데이터(Data) -> 이벤트에 대한 사실을 기록한 것
  • 효율적으로 접근하기 위해 데이터를 구성하는 방법
  • 데이터를 보관하기 위한 기술
  • 데이터를 이용해 중요한것을 발견하는 원칙

1회독 후기

...