티스토리 뷰

(학문적 정의) 함수형 프로그래밍이란(functional programming FP)

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

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

 

- 부수효과 : 함수가 리턴값 이외에 하는 모든 일을 말한다.  

  부수효과는 함수를 부를 때마다 발생하기 때문에 문제가 될수 있다.

    ex) 메일 보내기, 전역 상태 수정하기 

 

- 순수함수 (=수학함수) : 인자에만 의존하고 부수 효과가 없는 함수

  인자에만 의존한다는 말은 같은 인자를 넣으면 항상 같은 결과를 돌려준다는 말이다.

 

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

 

1. 부수 효과는 필요하다.

- 부수 효과는 소프트웨어를 실행하는 이유다. 이메일을 전송하지 않는 이메일 전송 소프트웨어가 무슨 의미가 있을까?

 

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

- 순수 함수가 아닌 함수도 사용하고, 잘 다룰 수 있는 기술이 많이 있다.

 

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

- 정의가 학문적이고 수학적이라 실제 소프트웨어 개발에서 사용하지 않는 것처럼 느껴진다. 하지만 함수형 프로그래밍으로 잘 만들어진 좋은 소프트웨어가 많이 있다.

 

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

 

함수형 프로그래밍에서는 코드를 세 가지로 분류합니다 - 코드를 액션과 계산, 데이터로 구분하기

 

액션 : 실행 시점이나 횟수 또는 둘 다에 의존한다. (시간에 의존적)

 

계산 : 입력값으로 출력값을 만드는 것, 같은 입력값을 가지고 계산하면 항상 같은 결과값이 나옵니다. 언제, 어디서 계산해도 결과틑 같고 외부에 영향을 주지 않습니다. 계산은 테스트하기 쉽고 언제든지 몇 번을 불러도 안전합니다.(시간에 의존적이지 않음)

 

데이터 : 이벤트에 대해 기록한 사실, 실행하지 않아도 데이터 자체로 의미가 있습니다. 같은 데이터를 여러 형태로 해석할 수 있습니다. 예를 들어 레스토랑에서 발행한 영수증 데이터가 있다고 합시다. 관리자는 이 데이터를 인기 있는 메뉴를 찾기 위해 쓸 수 있고, 고객은 외식비 지출 내역을 알아보기 위해 쓸 수 있습니다.

 

각 분류에 해당하는 함수형 프로그래밍 도구

액션 

- 시간이 지남에 따라 안전하게 상태를 바꿀 수 있는 방법

- 순서를 보장하는 방법

- 액션이 정확히 한 번만 실행되게 보장하는 방법

 

 

계산 

- 정확성을 위한 정적 분석

- 소프트웨어에서 쓸 수 있는 수학적 지식

- 테스트 전략

 

데이터

- 효율적으로 접근하기 위해 데이터를 구성하는 방법

- 데이터를 보관하기 위한 기술

- 데이터를 이용해 중요한 것을 발견하는 원칙

 

 

액션, 계산, 데이터를 구분하면 어떤 장점이 있나요? 

함수형 프로그래밍은 요즘 유행하는 분산 시스템에 잘 어울립니다.

 

분산 시스템 규칙 3가지

1. 메시지 순서가 바뀔 수 있다.

2. 메시지는 한 번 이상 도착할 수도 있고 도착하지 않을 수도 있다.

3. 응답을 받지 못하면 무슨 일이 생겼는지 알 수 없다.

 

여러 컴퓨터가 네트워크를 통해 통신하기 시작하면 소프트웨어가 복잡해집니다. 처리해야 할 메시지는 순서가 섞일 수 있고 중복되기도 하고 유실되기도 합니다. 시간에 따라 바뀌는 값을 모델링할 때 동작 방법을 이해하는 것은 중요하지만 쉽지 않습니다. 실행 시점이나 횟수에 의존하는 코드를 없애면, 코드를 더 쉽게 이해할 수 있고 심각한 버그를 막을 수 있습니다.

 

데이터와 계산은 실행 시점이나 횟수에 의존하지 않습니다. 그래서 코드를 데이터와 계산으로 바꿀수록 분산 시스템에서 생기는 여러가지 문제를 해결할 수 있습니다.

 

액션은 실행 시점과 횟수에 의존하기 떄문에 여전히 문제가 되지만, 코드 전체에 영향을 주지 않도록 격리시키면 됩니다.

또 분산시스템이 아무리 불확실성을 가지고 있다고 해도 액션을 안전하게 다룰 수 있는 기술이 있기 때문에 안심할 수 있습니다. 그리고 코드의 많은 부분을 액션에서 계산으로 옮기면 결과적으로 액션도 다루기 쉬워집니다.

 

함수형 사고 : 함수형 프로그래머가 소프트웨어 문제를 해결하기 위해 사용하는 기술과 생각

파트 1 : 액션과 계산, 데이터

- 코드를 액션과 계산, 데이터로 구분하기, 액션을 계산으로 리팩토링하기, 액션을 더 쉽게 다루기

 

파트 2 : 일급 추상 

- 함수에 함수를 넘겨 더 많은 함수를 재사용

- 설계 관점에서 반응형 아키텍쳐와 어니언 아키텍쳐를 일급추상과 연결

'개발공부 > 함수형코딩' 카테고리의 다른 글

함수형 코딩 - #Chapter 4  (1) 2023.12.07
함수형 코딩 - #Chapter 3  (2) 2023.12.07
함수형 코딩- #Chapter 2  (0) 2023.12.07