본문 바로가기

Study/Book

쏙쏙 들어오는 함수형 코딩 / 함수형 프로그래밍?

반응형

함수형 프로그래머는 액션, 계산, 데이터 이렇게 세분류로  코드를 나눈다.

 

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

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

- 순서를 보장하는 방법

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

 

2. 계산 : 입력값으로 출력값을 만드는 것

- 정확성을 위한 정적 분석

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

- 텍스트 전략

 

3. 데이터 : 이벤트에 대한 기록한 사실

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

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

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

 

분산 시스템 규칙 3가지

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

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

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

 

현실에서의 함수형 사고

토니가 피자가게에서 피자를 여러판 만들어야 한다. 

1.  액션과 계산, 데이터

- 액션 : 호출횟수와 시점에 의존하는 것 (반죽 펴기, 피자배달, 재료 주문)

- 계산 : 어떤 것을 결정하거나 계획하는 것 (조리법에 나올 것을 두 배로 만들기)

- 데이터 : 변경 불가능한 데이터를 간으한 많이 쓰려고 한다. (고객 주문, 영수증, 조리법, 결제, 재고)

- 계층화 설계 맛보기 

2. 일급 추상

-  주방을  자동화하기 : 타임라인 다이어그램을 사용하면 액션이 시간 순서에 따라 어떻게 실행되는지 볼 수 있다.

 

- 분산  시스템을 타임라인으로 시각화하기

여러 대의 로봇이 함깨 일을 하는 것은 분산 시스템을 의미한다.

타임라인 다이어그램은 문제를 파악하는 데 도움이 되었지만 실행 순서가 섞이는 것은 어떻게 할 수 없었다. => 실패

 

- 각각의 타임라인은 다른 순서대로 실행된다

서로 다른 타임라인에 있는 액션 간 실행 순서는 보장할 수 없다.

1) 기본적으로 타임라인은 서로 순서를 맞추지 않는다

2) 액션이 실행되는 시간은 중요하지 않다.

3) 드물지만 타이밍이 어긋나는 경우는 실제 일어난다.

4) 타임라인 다이어그램으로 시스템의 문제를 알 수 있다.

 

- 타임라인 커팅 : 로봇이 서로를 기다릴 수 있게 하기

1) 타임라이 커팅으로 서로 다른 작업들을 쉽게 이해할 수 있다.

2) 타임라인 다이어그램을 사용하면 시간에 따라 진행하는 작업을 쉽게 이해할 수 있다.

3) 타임라인 다이어그램은 유연하다. 

오른쪽 타임라인 커팅이 들어간 부분의 로봇들 작업이 끝나기를 기다린다. 그리고 모든 작업이 완료되면 로봇 한대가 나머지 피자를 완성한다. 

이렇게 하면 재 재료를 준비하는 작업은 순서가 중요하지 않게 된다.