메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

함수형 반응형 프로그래밍

FRP 입문자를 위한 종합 안내서

한빛미디어

번역서

판매중

  • 저자 : 스티븐 블랙히스 , 앤서니 존스
  • 번역 : 오현석
  • 출간 : 2017-08-01
  • 페이지 : 492 쪽
  • ISBN : 9788968488665
  • 물류코드 :2866
  • 초급 초중급 중급 중고급 고급
3.7점 (6명)
좋아요 : 29

 

함수형 반응형 프로그래밍에 관한 최초의 종합 안내서 

 

프로그램은 ‘어떻게’가 아니라 ‘무엇’을 기술하는 선언적인 문서여야 한다는 주장을 받아들이는 사람이 점점 늘고 있다. 이런 흐름은 함수형 언어의 부흥으로 이어졌다. 함수형 언어로는 프로그램을 더 선언적인 방식으로 작성할 수 있고, 이를 이벤트 처리에 결합한 것이 함수형 반응형 프로그래밍(FRP)이다. 지난 수십 년 동안 이벤트 처리 인프라를 책임진 관찰자 패턴은, 한편으로는 버그의 온상이 되기도 했다. FRP는 관찰자 패턴의 잠재적 버그 원인을 근본적으로 차단하여 더 복잡한 시스템으로 쉽게 확장할 수 있도록 해준다.

이 책의 저자는 FRP 프레임워크인 소듐(Sodium)의 창시자로서, FRP의 기초부터 기존 프로젝트를 점진적으로 FRP 시스템으로 탈바꿈시키는 방법까지 친절히 안내한다.

 

주요 내용

● 데이터와 이벤트를 바라보는 새로운 시각

● 자바와 자바스크립트에서의 FRP 기법

● 한 번에 하나씩, 관찰자에서 리스너 제거하기

● 소듐, RxJS, Kefir.js 등의 FRP 라이브러리 맛보기

 

스티븐 블랙히스 저자

스티븐 블랙히스

뉴질랜드의 파머스턴 노스 근처에 산다. 다수의 이벤트 기반 상업 프로그램을 만들었으며 2007년경 함수형 프로그래밍에 입문해서 오픈소스 소듐(Sodium) FRP 시스템을 만들었다. 바둑을 좋아한다.

앤서니 존스 저자

앤서니 존스

뉴질랜드 오클랜드에 산다. 자바 기반의 설정 GUI를 FRP 기반의 프레임워크로 리팩터링하면서 5년여를 보내왔으며 소듐 FRP 시스템을 만드는 데 기여했다. 자전거 타기를 즐긴다.

오현석 역자

오현석

모빌리티42 이사로 일하면서 매일 고객의 요청에 따라 코드를 만드는 현업 개발자다. 어릴 때 처음 접한 컴퓨터에 매료된 후 경기과학고등학교, KAIST 전산학 학사와 프로그래밍 언어 전공 석사를 취득하며 계속 컴퓨터를 사용했다. 직장에서는 주로 코틀린이나 자바를 사용한 서버 프로그래밍을 하고, 주말이나 빈 시간에는 번역을 하거나 공부하면서 즐거움을 찾는다. 『코어 파이썬 애플리케이션 프로그래밍』(에이콘, 2014)을 시작으로 『배워서 바로 쓰는 스프링 프레임워크』(2020), 『러닝 리액트(2판)』(2021), 『고성능 파이썬(2판)』(이상 한빛미디어, 2021) 등 30권 이상의 책을 번역했다.

 

 

1장. 듣기를 멈추자!

1.1 프로젝트, 복잡도의 벽에 부딪치다

1.2 함수형 반응형 프로그래밍이란?

1.3 FRP가 적합한 분야와 현재 상황

1.4 대화형 애플리케이션: 이벤트가 뭐야?

1.5 상태 기계 분석의 어려움

1.6 버그 없는 대화형 애플리케이션

1.7 리스너는 이벤트 처리의 기둥. 하지만...

1.8 리스너의 여섯 가지 재앙 퇴치하기

1.9 그냥 리스너만 고쳐서 사용하지 않는 이유

1.10 “재시작해봤어?” 또는 상태가 문제가 되는 이유

1.11 FRP의 장점: 복잡도 다루기

1.12 FRP는 어떻게 작동하는가?

1.13 패러다임 전환

1.14 의존성 관점에서 생각하기

1.15 선언적으로 생각하기: 이 프로그램은 무엇인가?

1.16 FRP, 개념적 이해 vs. 조작적 이해

1.17 함수형 프로그래밍을 이벤트 기반 코드에 적용하기

1.18 요약

 

2장. FRP의 핵심

2.1 스트림 타입: 이벤트의 흐름

2.2 맵 기본 요소: 값 변환하기

2.3 FRP 시스템의 구성요소

2.4 참조 투명성이 필요하다

2.5 Cell 타입: 시간에 따라 변하는 값

2.6 merge 기본 연산: 스트림 합치기

2.7 hold 기본 연산: 셀의 상태 유지하기

2.8 snapshot 기본 연산: 셀의 값 캡처하기

2.9 hold와 snapshot으로 루프를 만들어서 누적기 구현하기

2.10 filter 기본 연산: 원하는 경우에만 이벤트 전달하기

2.11 lift 기본 연산: 셀 조합하기

2.12 never 기본 연산: 결코 발사되지 않는 스트림

2.13 참조 투명성 관련 권장 사항

2.14 FRP 커닝 페이퍼

2.15 요약

 

3장. 자주 쓰는 위젯 만들기

3.1 독립 SWidget인 스피너

3.2 폼 입력 검증

3.3 요약

 

4장. 실제 애플리케이션 작성하기

4.1 주유 펌프 예제

4.2 주유 펌프 예제 실행하기

4.3 코드, 세상을 만나다

4.4 주유 흐름의 생애 주기

4.5 이렇게 하는 것이 실제로 더 좋은가?

4.6 주유한 연료량 계산하기

4.7 주유한 연료의 가격 표시하기

4.8 POS 시스템과 통신하기

4.9 모듈성을 보여주는 예: 키패드 모듈

4.10 모듈성에 대한 노트

4.11 현재 주유 금액 추가하기

4.12 이번 장에서 배운 내용

4.13 요약

 

5장. 새로운 개념

5.1 전설의 폰 노이만 기계를 찾아서

5.2 합성성

5.3 합성성 부족을 보여주는 예

5.4 합성성: 모든 종류의 버그 없애기

5.5 믿는 도끼에 발등 찍히지 않기: 불변 값 사용

5.6 의도의 명확성

5.7 저렴한 추상화의 결과

5.8 요약

 

6장. 웹에서의 FRP

6.1 RxJS

6.2 Observable

6.3 RxJS, Kefir.js, Flapjax에서 상태 유지하기

6.4 combineLatest로 두 Observable의 마지막 상태 얻기

6.5 뜨거운 Observable 만들기

6.6 예제: FRP 방식으로 자동 완성 기능 만들기

6.7 RxJS/소듐 치트 시트

6.8 정적 타입 지정을 선호함

6.9 요약

 

7장. 스위치 연산

7.1 sample 기본 연산: 셀의 값 얻기

7.2 switch

7.3 switch의 용례 1: 좀비즈

7.4 switch로 게임 캐릭터 변환하기

7.5 switch의 용례 2: 게임 캐릭터 생성과 제거

7.6 큰 merge의 효율

7.7 게임 캐릭터와 RxJS의 효율

7.8 switch의 용례 3: 잘못된 상태 제거하기

7.9 switch의 용례 4: 장면 전환

7.10 요약

 

8장. 조작적인 기본 연산

8.1 FRP 코드와 프로그램의 나머지 부분 연결하기

8.2 지연 연산으로 루프 문제 해결하기

8.3 트랜잭션

8.4 셀에서 update나 value를 사용해 스트림 얻기

8.5 split 기본 연산으로 새로운 트랜잭션 컨텍스트 만들기

8.6 규모 확장 가능한 대상 지정

8.7 요약

 

9장. 연속적인 시간

9.1 시간을 래스터화하기

9.2 시간 함수로 위치 표현하기

9.3 애니메이션 루프

9.4 시간 측정하기

9.5 요약

 

10장. 패러다임 간의 전투

10.1 전통적인 상태 기계 vs. FRP vs. 액터 모델

10.2 시프트 키를 눌러서 축을 고정하는 특징 추가하기

10.3 개선: 시프트 키로 문서 갱신하기

10.4 요약

 

11장. 실전 프로그래밍

11.1 I/O 다루기

11.2 프라미스/퓨처

11.3 분산 처리

11.4 단위 테스트

11.5 요약

 

12장. 도우미와 패턴

12.1 조용히 시키기: 중복 값 제거

12.2 게임 일시 정지하기

12.3 정션 또는 클라이언트 레지스트리

12.4 변경할 수 있는 원격 값

12.5 영속성

12.6 고유 ID 생성하기

12.7 FRP 기반의 GUI 시스템

12.8 요약

 

13장. 리팩터링

13.1 리팩터링을 할까, 하지 말까?

13.2 드래그 앤 드롭 예제

13.3 특징 추가하기: 드래깅 대상 원소 그리기

13.4 버그 수정하기: 클릭이 드래그로 취급됨

13.5 FRP: 봄바람 같은 리팩터링

13.6 요약

 

14장. 기존 프로젝트에 FRP 추가하기

14.1 FRP가 도움되는 분야는 어디인가?

14.2 불변 데이터 구조로 바꾸기

14.3 콜백을 대체하는 스트림

14.4 큰 트랜잭션 안에서 프로그램 초기화하기

14.5 정션/클라이언트 레지스트리 사용으로 확장성 모듈 만들기

14.6 셀이 변경 가능한 변수를 대치할 수 있다

14.7 요약

 

15장. 앞으로의 방향

15.1 성능

15.2 성능 개선과 임베디드 시스템을 위한 FRP 사전 컴파일

15.3 병렬성

15.4 문법 개선

15.5 표준화와 코드 재사용

15.6 FRP 데이터베이스 애플리케이션

15.7 시각화와 디버깅 도구

15.8 시각적 프로그래밍

15.9 리팩터링 도구

15.10 요약

 

부록 A. 소듐 API

부록 B. 이벤트 처리의 여섯 가지 재앙

부록 C. FRP 시스템 간의 비교

부록 D. 관리자를 위한 조언

부록 E. 소듐의 표시적 의미

책 내용이 이상한 줄 알고 보았더니 조금 심도 있는 부분의 내용들을 설명하는 부분의 번역들이 문맥과 내용과 달리 이상한 번역으로 되어있네요.

 

번역서로 조금 편하게 보려고했는데 그냥 원서 보는게 나을것 같습니다.

## 추천

 

이 책은 자바를 사용하는 프로그래머에게 객체지향형/절차형 프로그래밍의 테두리를 벗어나 새로운 자극과 시각을 체험하게 해준다. 익숙한 테두리를 벗어났다가 다시 익숙한 곳으로 돌아가더라도 새로운 시각과 자극이 프로그래밍을 더 잘할 수 있게/더 고민하게 해 줄 것이라고 생각한다. 

 

## 책 읽기 전에 알아두면 편한 것

 

- git

- 메이븐

- java 8 : 책에서도 Java 8 in Action 을 추천하고 있다. 적어도 스트림과 람다 부분을 알고 있어야 한다.

- javascript : 읽을 수 있는 정도면 충분하다.

- c : c 문법에만 의지해서 읽을 수 있는 정도면 충분하다.

 

## 장점

 

### 번역이 정말 매끄럽다. 

 

문화권이 다른 점을 고려해서 레밍턴 케이크(잘 모르는 음식)를 떡으로 바꾸어 더 잘 이해할 수 있도록 하는 세심한 배려가 넘친다. **번역은 완벽**하다고 생각한다. 

 

### 구성이 보기 좋게 되어있다.

 

챕터를 시작할 때 주제를 보여주고, 새로운/정의가 필요한 용어가 등장했을 때 곧바로 `DEFINITION`이 나타난다. 도움말과 보충 지식이 '딱 궁금해질 시점'에 `NOTE`로 등장하여 읽는 데 속도를 낼 수 있게 해준다. 각 챕터가 끝날 때는 요약하는 장이 있어서 읽었던 것을 이해했는 지 테스트하는 용도로도 쓸 수 있다.

 

### 알맞은 수준의 예제

 

저자가 예제를 고르는 데에 심혈을 기울였다는 것이 느껴진다. 충분히 실전에 등장할 법하면서도, 설명하기 위한 정도에 걸맞는 적당한 난이도를 가진 예제들이다. 

그리고 이 예제를 발전시켜 나가면서 설명을 하기 때문에, 예제를 따라하면서 이해하도록 배려한 점이 돋보인다.

 

## 취향에 따라 다를 수 있는 부분

 

### '약' 농도가 높게 느껴질 수 있다.

 

책을 읽다 보면 '멀리 보고 프로그래밍 할 거면 FRP 하세요'라는 소리가 들리는 것 같기도 하고(...) 'FRP가 이렇게 좋습니다 여러분!'하는 말을 들은 것 같기도 하고(...)

암튼 저자가 발휘하는 Po설득wer 혹은 Po전도wer가 느껴진다. 물론 근거는 다 있어서 억지스러운 건 아닌데 취향을 탈 수도 있는 부분 같아서 언급해둔다.

 

## 한 번 읽었을 때 챕터별 간단 소감

 

한 번 읽어서 전부 이해하기는 힘들고(책이 술술 읽히는 것과 읽어서 이 내용을 소화했다는 것은 다름) 첫 번째 읽으면서도 이미 '두 번째는 이렇게 하면서 읽어야겠다'는 계획이 세워진다(...)

 

다음 번 읽었을 때 소감과 비교해보기 위해 챕터별 첫 인상을 남겨본다.

 

- 1장 : 복잡도를 다루어 내고 싶다고요? FRP가 여기 있습니다!

  -  1.15의 '선언적으로 생각하기'를 설명하는 비유가 아주 멋지다. 내가 먹는 걸 좋아해서 그렇게 느낀 것일 수도 있지만, 라자냐 레시피에 비유했음에도 설명에 어긋남이 조금도 없다.

- 2장 : 참조투명성, 참조투명성, 참조투명성 + Cell 타입은 두 번째 읽을 때 더 천천히 읽어 봐야겠다.

  - Unit 데이터 타입 설명이 몹시 꼼꼼하게 되어있다.

  - 2.4의 '참조 투명성'에 대한 `Note`도 꼼꼼함에 감탄하게 된다(...)

  - 2.6에서 "몇몇 유사 FRP 시스템에서는 동시 이벤트 개념이 없다"고 따끔하게 지적하고 있다.

- 3장 : 예제. 짧아요.

- 4장 : 예제. 적절한 예제. 두 번째 볼 때는 처음부터 끝까지 타이핑해봐야겠다.

- 5장 : 폰 노이만으로 시작해서 Po전도wer

  - 5.1 "기존의 소프트웨어를 빠르게 실행하기 위해서 현대의 기계들은 폰 노이만 기계인 척 하기 위해 최선을 다한다."

  - 5.2 합성성,합성성,합성성

  - 5.3 "객체지향 방식에서 합성성이 부족한 이유는?" <- 제목이 설명을 다 했네.

    - 여기에 초월 번역이 등장. 레밍턴 케이크를 떡으로 적절히 바꿔주신 역자님, 감사합니다!

- 6장 : "웹에서 FRP"

  - RxJS -> Kefir.js -> Falpjax 로 같은 예제를 구현해본다.

  - 소듐이 진정한 FRP다 _po전도wer_

- 7장 : 게임도 구현해봅니다. 게임은 FRP 써보기에 참 적당하죠. 두 번째 읽을 때는 역시나 타이핑 우선으로 읽어야겠다.

- 8장 : 익숙한 연산(=조작적인 부분) + 트랜잭션, 이렇게 쓸수 있습니다.

- 9장 : 애니메이션을 만들면서 FRP의 유용함을 느껴봅시다!

- 10장 : 패러다임 비교하기 - 액터 모델이 더 매끄럽게 쓰이는 경우도 있다.

- 11장 : 실전 프로그래밍이라고 쓰고 피할 수 없는 실제 문제들이라고 읽을 수 있는 부분-I/O, 병렬, 분산, 테스트 + 프라미스(라고 쓰고 퓨처도 포함시킨다)

- 12장 : FRP 써서 GUI 라이브러리도 구현할 수 있지요!

- 13장 : 리팩터링 -> po전도wer

- 14장 : 가장 매력적으로 보이는 "기존 프로젝트에 FRP 추가하기"

  - 14.4 "트랜잭션 안에서 프로그램 초기화 하기" : 소듐 사용한 예시를 보여줌

- 15장 : FRP로 하고 싶은 일은 여기 더 있습니다!

  - 15.2 사전 컴파일 사용하면 성능 개선과 임베디드 시스템에서도 쓸 수 있다는 장점이 있습니다.

  - 15.3 "FRP 코드를 GPU에서 실행하는 방식은 그리 타당하지 않을 것이다. GPU는 데이터 병렬성이라는 다른 종류의 병렬성에 더 적합한 기계이며, 한 번에 많은 데이터 집합에 같은 연산을 여러 번 적용할 때 더 좋다."

 

 

### 두 번째 읽기를 한다면

 

- 코드를 전부 타이핑해보는 게 좋겠다.

- 온라인이라도 좋으니 여럿이 같이 타이핑 해보고 이야기를 나눠봤으면 좋겠다.

 

스티븐 블랙히스/앤서니 존슨의 <함수형 반응형 프로그래밍>을 소개합니다. 최근 커뮤니티에서 Functional Reactive Programming(FRP)에 대한 관심이 증가하고 있으며, 또한 FRP에 대한 토론이 많이 이루어지고 있습니다. 

 

FRP의 정의에 대해 논란이 많습니다만, 이 논란에 대한 내용은 Conal ElliottPaul Hudak가 발표한 Functional Reactive Animation에 정확하게 정의되어 있습니다. 이에 대한 FRP 이슈를 소개한 글을 다음 링크에서 확인하실 수 있습니다.

 

Functional Reactive Programming에 대한 또 다른 매력적인 글로 Conal Elliott이 스택오버플로우에서 `What is functional reactive programming`의 답변이 매우 유명합니다[링크]. 그리고 이 답변을 번역해 놓은 오현석(이 책의 역자)님의 블로그의 글도 링크를 남깁니다. 

 

필자가 윗글에 대한 내용을 모두 이해하긴 아직 내공이 부족한 것 같습니다. 앞으로 꾸준히 학습하다 보면 이해하는 깊이가 더 늘어나겠지요.

 

함수형 반응형 프로그래밍이란?

<함수형 반응형 프로그래밍>의 저자들이 생각하는 FRP의 정의를 요약하면 다음과 같습니다.

 

- FRP는 자주 사용하는 옵저버 패턴을 대치한다. 옵저버 패턴을 리스너나 콜백이라고도 한다.

- FRP는 이벤트 위주의 로직을 조합하므로 조합 가능한 모듈로 코딩하는 방법이다.

- FRP는 다른 방식으로 사고한다. 프로그램을 입력에 대한 반응 또는 데이터의 흐름으로 표현한다.

- FRP는 프로그램 상태를 관리하는 데 질서를 부여한다.

- FRP는 근본적인 방식으로 옵저버 패턴으로 문제를 해결하려고 노력하는 사람이라면 결국에는 FRP를 발명하게 될 것이라 생각한다.

- FRP는 일반적인 프로그래밍 언어의 경량 소프트웨어 라이브러리로 구현된다.

- FRP는 상태가 있는 로직을 위한 완전한 내장 언어(embedded language)라고 볼 수도 있다.

 

<함수형 반응형 프로그래밍> 1장의 내용 중 일부분

 

이 책에서 다루는 내용은?

<함수형 반응형 프로그래밍>은 BSD 라이선스의 Sodium(https://github.com/SodiumFRP) 라이브러리를 제작한 분들이 작성한 책입니다. 책 내용 중 많은 부분에서 Sodium을 활용하여 FRP의 이해를 돕고 있으며, 예제에서 Sodium을 활용하고 있습니다. 이 책을 보기 전에는 Sodium 라이브러리에 대해 전혀 모르고 있었는데, 이 책을 통해 좋은 라이브러리를 하나 얻은 것 같습니다. Java를 기본으로 설명하고 있기 때문에 FP를 학습할 때마다 느껴지는 언어에 대한 부담은 다소 적을 것으로 생각됩니다.

 

이 책에서 소개하는 내용을 하나의 글로 소개하는 것은 무리가 있어 걱정이 많았습니다. 하지만 한빛미디어에서 이 책의 내용을 적절하게 구성해서 두 개의 글로 정리해 놓았습니다. 아쉽긴 하지만, 이 글을 소개하며 이 단락의 내용을 마치려 합니다. 대신 앞으로 FRP에 대해 깊이 있는 학습을 통해 FRP와 관련된 글을 작성해 보겠습니다.

 

- FRP로 이벤트 처리의 여섯 재앙 퇴치하기(1/2)

- FRP로 이벤트 처리의 여섯 재앙 퇴치하기(2/2)

 

개인적으로 함수형 반응형 프로그래밍에 관해 관심이 있다거나 혹은 학습하고 싶은 분이라면 꼭 한 번 읽어보는 것을 추천합니다. FRP에 대한 개념 정리부터 다양한 예제를 통해 FRP를 직접 맛볼 좋은 기회를 제공할 것으로 생각합니다.

 

마치면서...

<함수형 반응형 프로그래밍>을 읽고난 후, 처음 든 생각은 "이 책 다시 봐야겠다." 였습니다. 아주 잘 작성된 원고와 멋진 역자님께서 FRP에 대해 소개했지만, 필자의 역량이 부족한 것 같습니다. FRP 입문서라고 소개하고 있지만, 필자는 다소 어려웠습니다. 정확하게 이해한 개념이 30% 정도도 안되는 것 같습니다.

 

이 책의 저자가 참여하고 <함수형 반응형 프로그래밍>에서 다루고 있는 Sodium FRP 라이브러리의 코드를 보며 FRP의 개념에 대해 차분히 이해해야 할 것 같습니다. Sodium 라이브러리는 다양한 언어로 작성되어 있으니 한동안 손을 놓고 있었던 스칼라도 함께 학습하겠다고 다짐해봅니다.

함수형 반응형 프로그래밍

 

 - FRP 입문자를 위한 종합 안내서

 

 

 

 

이런 저런 프로그래밍에 대한 이야기들을 듣다보면

 

내가 하는 일이 아니어도 들리는 이야기들이 있게 마련입니다. 

 

'함수형'이나 '반응형' 이라는 말은 그런와중에 꽤나 자주 

 

듣게 되었던 이야기중 하나였던것 같습니다. 

 

실제 작업을 하다보면, 관련 업무의 특성에 따라 

 

기술을 사용할 수도 사용하지 않을 수도 있습니다. 

 

그동안 해왔던 일들이 '함수형' 이나 '반응형'에 대한 

 

깊은 (혹은 얕은) 이해가 필요한 일들이 아니다보니

 

그다지 많은 생각을 하지 않고, 넘어갔던 것 같습니다. 

 

 

개인적으로 '함수형'에 대한 내용은 관련있는 책도 좀 읽고

 

이런 런 얘기도 들어보고 나름 약간 익숙한 내용이었지만, 

 

'반응형'이란 것은 그다지 관심이상의 수준은 아니었던 것 같습니다. 

 

둘 중에 하나만 조금아는 수준에서 '입문자를 위한 안내서'라는 

 

부제에 혹해 도전해 보게 되었습니다. 

 

 

함수형은 말그대로 함수형 프로그래밍에서 사용하는 그대로의 말입니다.

 

하스켈 같은 것을 사용해본 경험이 있다면, 아마도 대략의 느낌은 

 

알 수 있을 것 같습니다. 

 

반응형은 이벤트 처리 방식을 말 합니다. 

 

완전 최신이라거나 대단히 어려운 말은 아니지만, 

 

어찌보면 별 다른 관련이 없는듯 보이는 두 가지 요소가 결합되었다는 

 

것을 알려주기 위한 표현방식이라고 볼 수 있습니다. 

 

함수형에 대한 이야기를 하다보면, 함수형(FP) 과 반응형(RP) 을 혼동하는 

 

경우가 있는 것 같습니다. 

 

아니 함수형과 반응형보다는 '함수형'과 '함수형 반응형'이 정리가 되지 

 

않아 혼란스러운 경우가 발생하기도 했는데요 

 

 

책에 나온대로 정리해 보면

 

(함수형 반응형 프로그래밍) = (함수형 프로그래밍) + (이벤트 처리)

 

정도로 정리해 볼 수 있습니다. 

 

 

 

 

1. 대상 독자에 대한 이야기 

 

일반적인 프로그래밍 경험은 있지만, 함수형 프로그래밍은 모르는 사람이 

 

그 대상입니다. 

 

'함수형 반응형'에 대한 내용을 알려주고, 이는 '함수형' 프로그래밍의 

 

아이디어를 기초로 하지만, 몰라도 도전해 볼 수 있다는 점에서 

 

상당히 매력적입니다. 이는 함수형 프로그래밍에 대해 궁금하거나

 

개념이 잘 정리되지 않은 경우더라도, 약간 다른 길을 통해 

 

함수형 프로그래밍에 대한 이해를 높이는데도 도움이 될 것 같습니다. 

 

 

2. 책의 구성에 대한 이야기 

 

기본서이니 만큼 개념적인 이야기들이 들어있지만, 

 

실제로 함수형과 반응형의 에 대한 이론적인 깊이 보다는 

 

기본적인 개념과 이에 대한 이해를 위해 예제를 작성해 보도록 

 

되어 있습니다. 

 

제가 보기에는 자세하게 나와있는 편이었는데요

 

한 번에 보기는 어려웠지만, 설명에 나와있는 개념들을 

 

확인하고 이해하는데 많은 도움이 되었습니다. 

 

 

3. 개인적인 아쉬움

 

기본적인 예제가 설명이 잘 되어 있었지만, 

 

비슷하거나 약간 난이도가 있는 예제가 두 세개 정도 

 

더 있었더라면 하는 아쉬움이 있습니다. 

 

이해를 한 것 같은데, 막상 바로 적용하려면 뭔가 빠진게 아닌가 

 

하는 생각이 드는 부분이 없지 않았는데요.

 

조금 더 연습할 수 있었으면 하는 바람이 생겼습니다. 

 

 

 

 

 

결론적으로 

 

함수형도 반응형도 잘 모르지만, 프로그래밍 경험은 있고,

 

'함수형','반응형', '함수형 반응형' 각각에 대해 궁금하다는

 

분이라면 이 책이 도움이 될 것 같습니다. 

 

Java 에 대한 아쉬움으로 Scala 나 Haskell 을 본지는 몇년 되었고, 최근 들어 RxJava 프로젝트를 몇 달 째 참여하고 있으면서 이 책을 기다렸다. 

번역 하신분( 오현석님 책은 다 구입을 한 것 같다)이나 주제가 분명히 나에게 도움이 될 거라고 생각했기 때문이었다.

 

이 책은 Sodium 이라는 프레임웍을 기반으로 Swing을 확장한 swidget.* 으로 설명을 시작한다. 처음에는 웬 스윙..? 이라고 생각했으나 중간 중간 나오는 그림과 스윙 기반의 예제는 나름 도움이 되는 보조역을 해주었다. 하지만 너무 많은 UI 쪽 코드가 집중력이 분산된 건 좀 아쉬웠다.  그리고 처음 보는 Cell, Stream 단어를 가지고 설명을 해서 좀 어려웠던 것 같다

 

개인적으로는 초반의 개념이나 기초 펑션에 대한 설명보다는 오히려 10장이후의 내용들이 많이 도움이 되었다. 고민되는 부분이나, 평소에 궁금했던 내용들을 언급해 주어서 많은 생각을 해주게 했다. 책 자체는 400 page 정도로 두꺼운 편은 아니지만, 빨간책 스칼라 만큼이나 천천히 읽고, 다시 읽고, 읽어도 뭔소리야? 라고 많이 생각한 것 같다. 한 2-3번 더 읽어보면 놓쳤던 부분을 좀 더 내것으로 만들 수 있지 않을까? 라고 생각이 든다 

 

1. 필요와 충분의 사이에서
 
 
듣기(listening)을 멈추고 반응(reacting)을 시작하라! p.29
 
한동안 `python`으로 작업하는 일이 많았고, 프레임워크의 절대적인 도움을 많이 받다보니 요즘 힙(`hip`)하다는 '함수형' 프로그래밍을 소문으로만 들었지 프로덕션에 적용해 볼 수 있는 기회가 없었다. 짧게 말해서, 함수형 프로그래밍을 해 본적이 전혀 없었다. 그리고 `해야(should, would)` 할 이유도 없었기 때문에 신경을 쓰지 않고 있었다.
 
그런데, 올해(2017) 5월부터 미국에 있는 팀과 협업을 하는 과정에서 `JDK 8`을 기반으로한 [`Spring Boot`](https://projects.spring.io/spring-boot/)를 사용하게 되면서 `람다(lambda)`나 `stream()`을 사용하게 되면서 함수형 프로그래밍 언어를 `배워야(must)` 할 이유가 생겼다.
 
그래서 서점에 가서 책을 몇권 구매해서 읽기 시작했다. 제일 처음 읽기 시작한게 [`자바 8 인 액션, `](http://www.aladin.co.kr/shop/wproduct.aspx?ItemId=54967448) 이였다. 나의 소중한 `JDK 6`에 비해서, `JDK 8`은 천지개벽같은 상황이었다. 소중한 나의 `JDK 6`은 이제 안녕을 고하고 `JDK 8`을 열심히 사용하려고 했지만, `JDK 8`에 포함된 각 종 개념들 덕분에 코드가 슬프게 되어버렸다.
 
일은 해야했기 떄문에 끙끙거리면서 코드를 작성하긴 했지만 뭔가 애매한 코드만 잔뜩 작성한 듯 싶다. 그래서 `Rx`계열의 책을 구매해서 읽어도 보고, 함수형 프로그래밍과 관련된 서적들을 조금씩 읽어보았지만, 다른 책에서 언급해서 알고 있을 것 같은 내용의 전혀 모르는 개념들만 머리속에 뒤죽박죽 되었다. 그래도 계속해서 읽고, 남는 시간에 예제를 수정하고 변경해 보는 작업을 계속해서 진행했다.
 
5월부터 시작된 나의 'JDK 8'과 `함수형`의 탐구는 끝나지 않았다. 이번에 운이 좋겠도 [`한빛미디어`](http://www.hanbit.co.kr/)에서 책을 지원받을 수 있게 되었을 때, [`함수형 반응형 프로그래밍 - FRP 입문자를 위한 종합 안내서`]가 눈에 들어왔고, 젭싸게 선택했다.
 
2. 쉽지만 어려운 '생각의 전환'
 
 
FRP는 새로운 패러다임이다. [...] 여러분이 그 사고방식을 받아들인다면 FRP를 가장 잘 활용할 수 있다. p.48
 
이 책을 선택했던 이유는 지금까지 읽었던 몇 권의 책을 정리해 줄 것 같은 매력적인 이름 때문이기도 하지만, `함수형`와 `반응형`을 공부할 때 참고하던 블로그에서 이 책을 언급한것이 기억났기 때문이다. 
 
책을 받고 두근두근 하는 마음으로 읽었기 시작했다. 이전에 읽었던 책에 비해서 `함수형`에 대한 정의, `반응형`과의 차이점에 대해서 꼼꼼하게 소개해주기 때문에 이전에 내가 읽었던 책의 내용을 가볍게 상기할 수 있었고, `함수`와 `반응`에 대해서 나름의 기준을 가질 수 있어서 굉장히 좋았다. 특히 번역이 잘되어 있어서 읽는데 거부감이 없다는 점도 좋았다.
 
가볍운 예제를 통해서 [`Sodium`](https://github.com/SodiumFRP/sodium)의 사용법을 알려주는 부분에서 역시나 약간은 어렵고 조금은 뜬구름 잡는 느낌이 들었다. 그럼에도 불구하고 내용 자체가 어렵지 않았기 때문에 조금씩 읽어나가자 이 책의 백미라 할 수 있는 4장까지 간신히 올 수 있었다.
 
3. 예제!, 예제가 좋다!
 
 
FRP는 근본적으로 출력을 입력의 측면에서 선언적으로 기술하는 것이다. p.56
 
이 책은 예제가 굉장히 좋다. 챕터 4의 경우 약 40페이지에 걸쳐서 `주유 펌프 예제`를 진행하게 된다. 이 예제는 `Sodium` 라이브러리를 사용해서 `함수형` 프로그램밍 기법을 사용해서 진행된다. 주유 펌프 로직을 구현하는 인터페이스부터 선언해서 주유 펌퍼의 키패드까지 코딩을 진행할 수 있다. 4챕터에서 진행되는 `주유 펌프 예제`는 책 전반에 걸쳐서 가장 재미있고, 유익했던 부분이다. `함수형` 프로그래밍 기법만 사용해서 만들어지는 예제기 때문에 코드를 최대한 많이 수정했고, 내가 알고 있는 개념들을 하나씩 코드로 연습해 볼 수 있었기 때문에 이 챕터를 오랫동안 읽었다.
 
또한 11챕터에 가면 `함수형` 프로그래밍 기법을 사용해서 `I/O`, `프라미스/퓨처`, `분산처리` 등을 연습해 볼 수 있기 때문에 앞선 챕터에서 이론적인 설명을 코드를 사용해서 실행해 볼 수 있다.
 
4. 결론
 
 
[...] FRP는 발견이지 발명이 아니다. [...] 여러분이 선호하는 언어의 FRP 라이브러리가 없다면 기존의 구현을 그 언어로 포팅할 것을 권한다. p.40
 
 
이 책은 단점보다 장점이 많은 책이다. 아주 훌륭한 예제를 인터페이스 선언부터 키패드 클래스를 구현하는 부분까지 상세하게 다루고 있기 때문에 `함수형` 프로그래밍 기법을 손쉽게 연습해 볼 수 있으며, `함수형`과 `반응형`에 관한 두 가지 논의를 한 권의 책을 통해서 읽을 수 있다. 
 
반면, 기존의 `함수형` 프로그래밍 기법을 소개하는 책이나 반응형 라이브러리인 `RxJava`나 `RxJS`를 설명하는 책 혹은 분산처리 라이브러리인 `Akka`를 다루는 책에 비해서 학술적인 설명 혹은 원론적인 설명이 부족할 수 있으며, 특정 라이브러리에 지나치게 의존한다는 단점이 있을 수 있다.
 
장점과 단점을 고려했을 때, `함수형` 프로그램이 기법이나 `반응형` 라이브러리와 관련된 선수 지식이 있으신 분들에게 적극적으로 추천하고, 이러한 프로그래밍 기법이나 라이브러리를 처음 접하는 분들에겐 4장의 예제를 중심으로 공부하고, 자신에게 필요한 부분의 전문적인 서적을 참고해보시면 좋을 듯 싶다.
 

 


 
1. > 엥겔바트의 시스템은 경천동지할 만큼 놀라운 상호작용성을 보여줬다. [...] 데스크톱이라는 용어와 사용자 인터페이스 면에서의 여러혁신과 더블어 그 시스템에는 최초의 객체지향 언어인 스몰토크가 탑재되어 있었다. p.5
 
2. > [...] 비동기 시스템을 프로그래밍하면서 다양한 문제로 어려움을 겪어본 프로그래머라면 FRP나 Rx가 크게 도움 될 수 있다. 이 책은 개발자라면 누구나 읽어볼 만한 가치가 있는 책이라고 감히 말하고 싶다. p.9
 
3. > "질문자가 구현이 아니라 명세에 대해 먼저 물어본 것이 기쁩니다. [...] 많은 친구들이 이 두 가지(표시적, 시간 연속적)를 빼먹고 여러 가지 구현상의 관념만으로 FRP를 정의하곤 합니다. 내가 볼 때 그런 정의는 모두 요점을 벗어난 것입니다. p.32
 
4. > 마이크로소프트의 반응형 확장은 이 책을 쓰는 현재 진정한 FRP가 아니다. Rx는 아카와 FRP 중간의 어느 지점에 위치한다. Rx와 FRP의 설계 목표에는 차이가 있다. Rx는 주로 이벤트 핸들러를 사슬처럼 엮는데 관심이 있으며 다양하게 엮는 방법을 제공한다. p.34
 
5. > [...] 스레드는 상태 변화를 제어 흐름으로 모델링한다. 스레드는 상태 변화 순서가 명확히 정의될 때 I/O에 잘 어울리는 경향이 있다. 액터나 제너레이터도 이 범주에 넣을 수 있는다. 이벤트는 프로그램에서 전파되는 이산적이고 비동기적인 메시지다. 이벤트는 순서가 덜 명확할 때 적합하다. 특히, 구성요소 간의 상호작용이 복잡할 때 잘 들어맞는다. 전형적인 응용으로는 그래픽 사용자 인터페이스와 비디오 게임을 들 수 있다. p.35
 
6. > Unit은 일종의 '아무것도 아닌 값'이다. Unit은 함수형 프로그래밍 용어이자 개념이다. [...] 값이 없는 경우 하나뿐인 인자에 채워 넣을 아무것도 아닌 값이 하나 필요하다. p.65
 
7. > 다시 반복하지만 FRP의 기본 연산에 전달되는 함수는 모두 다 반드시 참조 투명(또는 순수)해야 한다. 이는 그 함수가 I/O를 수행하거나, 외부 상태를 읽거나, 외부 상태를 변경하거나, 내부 상태를 유지해서는 안 된다는 뜻이다. p.86
 
8. > 람다를 입력으로 받는 메서드가 여러분을 대신해서 자원을 열고 닫는 경우를 '빌려쓰기 패턴'이라 한다. 파일을 사용할 때 이런 패턴을 자주 볼 수 있다. p.95
 
9. > [...] 그런 경우 언어의 설계(포인터)로 인해 컴파일러가 프로그램의 시간적인 메모리 접근 패턴을 인식해서 최적의 위치에 투명하게 각 메모리 블럭을 배치하는 것이 불가능하다. p.158
 
10. > 모든 문제를 합성적인 방법을 사용해서 다룰 수 있는 것은 아니다. 상태가 있는 이벤트 기반의 로직은 언제나 비합성적인 분류에 들어가며 그런 문제는 항상 버거의 온상이다. p.166
 
11. > 여러분이 항상 불변 데이터 구조를 사용해야 한다는 것은 참조 투명성에 따른 자연스러운 귀결이다. [...] 이런 데이터 구조를 함수형 데이터 구조나 영속적 데이터 구조라고 부른다. p.172
 
12. > [...] 이 10가지 연산을 함께 사용하면 모든 것이 멋지고 조화로운 완벽한 세상이 탄생한다. p.257
 
13. > 액터는 단일 비동기 입력 대기열을 통해서 들어오는 메시지를 처리하는 임무를 가지는 프로세스다. [...] 액터는 주로 스레드와 같은 제어 흐름을 사용해 구현된다. p.307
 
14. > [...] 결과적으로 여러분은 거의 아무것도 없는 데서 스트림을 만든 셈이다. 우리는 이를 스파크라고 부른다. p.338
 
15. > [...] FRP는 타입 주도 개발이라 할 수 있다. FRP에서 데이터 타입은 문제를 제한하고 여러분이 실수를 저지를 가능성을 낮춰준다. FRP에서 타입의 역할은 TDD에서 테스트의 역할과 비슷하다. 하지만 TDD에 비해 노력은 더 적게 든다. p.343

결제하기
• 문화비 소득공제 가능
• 배송료 : 2,000원배송료란?

배송료 안내

  • 20,000원 이상 구매시 도서 배송 무료
  • 브론즈, 실버, 골드회원이 주문하신 경우 무료배송

무료배송 상품을 포함하여 주문하신 경우에는 구매금액에 관계없이 무료로 배송해 드립니다.

닫기

리뷰쓰기

닫기
* 도서명 :
함수형 반응형 프로그래밍
* 제목 :
* 별점평가
* 내용 :

* 리뷰 작성시 유의사항

글이나 이미지/사진 저작권 등 다른 사람의 권리를 침해하거나 명예를 훼손하는 게시물은 이용약관 및 관련법률에 의해 제재를 받을 수 있습니다.

1. 특히 뉴스/언론사 기사를 전문 또는 부분적으로 '허락없이' 갖고 와서는 안됩니다 (출처를 밝히는 경우에도 안됨).
2. 저작권자의 허락을 받지 않은 콘텐츠의 무단 사용은 저작권자의 권리를 침해하는 행위로, 이에 대한 법적 책임을 지게 될 수 있습니다.

오탈자 등록

닫기
* 도서명 :
함수형 반응형 프로그래밍
* 구분 :
* 상품 버전
종이책 PDF ePub
* 페이지 :
* 위치정보 :
* 내용 :

도서 인증

닫기
도서명*
함수형 반응형 프로그래밍
구입처*
구입일*
부가기호*
부가기호 안내

* 온라인 또는 오프라인 서점에서 구입한 도서를 인증하면 마일리지 500점을 드립니다.

* 도서인증은 일 3권, 월 10권, 년 50권으로 제한되며 절판도서, eBook 등 일부 도서는 인증이 제한됩니다.

* 구입하지 않고, 허위로 도서 인증을 한 것으로 판단되면 웹사이트 이용이 제한될 수 있습니다.

닫기

해당 상품을 장바구니에 담았습니다.이미 장바구니에 추가된 상품입니다.
장바구니로 이동하시겠습니까?

자료실