국내의 함수형 개발자 커뮤니티를 빌딩하기 위한 첫 걸음
김상현님, 김대현님, 김은민님, 박지수님
1. REPL, Clojure의 슈퍼파워
1.1 REPL이란?
- Read -> Eval -> Print -> Read ...
- 코드를 읽고 평가하고 평가 결과를 반환
- 빠른 즉시 평가
- 점진적인 로직 설계
- 실행 중인 프로그램과 상호작용 가능
1.2 Clojure + REPL
- 동적 바인딩
- 데이터 중심
- 디버깅
- 다이나믹, 데이터 중심적, 빠르고 재미있음
동적 바인딩
- 실제 실행중인 프로그램에 동적으로 바인딩
- 함수를 실시간으로 REPL에 재평가 동적으로 실시간 반영
- 피드백을 받아 디버깅, 로직 추가
데이터 중심
- 객체가 아닌 데이터를 다룸
- 자유도가 높음
- 로직을 설계하기 쉬움
디버깅
- 데이터 중심적으로 편리하게 디버깅
- request를 capture
- 코멘트에서 코드 작성 -> REPL에서 테스트 -> 함수로 완성
1.3 REPL 기반 개발의 특징
- 기존의 방식은 컴파일, 상태복원에 시간이 많이 걸림
- REPL 기반 개발 방식은 컴파일과 상태복원에 시간이 거의 안 걸림
- 프론트 작업처럼 백엔드에서도 주기가 짧게 즉각적으로 작업 가능
1.4 불변 자료의 이점
- 객체의 운명이 정해짐 -> 상태 예측 할 필요가 없음
- 한번 동일하면 -> 영원히 동일함
- 방어적 복사할 필요가 없음 -> 공유가 쉬워짐
- 항상 thread-safe -> 병렬 프로그래밍이 간단해짐
1.5 질의응답
- Clojure는 Dynamic Type
- REPL에서 테스트 코드를 만들기 쉬움
2. 함수형 Scala
2.1 함수형 프로그래밍 좋은 점
김대현님
프로그래밍
- 내가 풀기 원하는 문제를 컴퓨터에게 풀게 함
- 문제의 규모가 커서 한 번에 해결하기 힘듦
- 한 번에 생각할 수 있는 범위는 제한적
- 커다란 문제를 잘게 나눠 풀고
- 그 해결책을 잘 조립
프로그래밍 방법별 조립법
- 절차형 프로그래밍
- 코드 블럭으로 나눠서 점프, 복귀
- 프로시져, 서브루틴
- 객체지향 프로그래밍
- 내부 상태를 숨긴 객체를 상속, 위임
- 함수형 프로그래밍
- 함수를 합성
함수형 프로그래밍
- 풀고자하는 문제를 함수로 주로 써서 해결하는 프로그래밍
- 사람이 이해하기 좋음
2.2 함수형 프로그래밍에서 쓰는 매직템
FP 특징
- 기계 중심 관점과 사람 중심 관점의 차이
- 작은 문제를 해결하는 함수를 합성해 큰 문제를 해결
- 순수 함수의 입력과 출력을 다룬다면, 추론이나 테스트가 쉬움
- 시간과 상태를 고려하지 않아도 됨
- 멀티스레드 처리가 쉬움
- 오랜 기간 탄탄히 갖춰진 수학적 모델을 빌려쓰기 좋음
- 증명된 탄탄함
고차함수
- 어떤 함수가 다른 함수를 인수를 받거나 호출 결과로 보통의 값이 아닌 함수를 반환 또는 둘 다를 하는 것
- 함수를 평범한 값으로 취급할 수 있어야 가능
- 언어마다 람다함수 등의 간결한 문법을 제공하는 경우가 흔함
순수함수
- 같은 인수를 넘겨 호출하면, 언제나 결과값이 같게 나옴
- 함수를 호출해도 별도의 부수 효과가 발생하지 않음
- 명령형 프로그래밍 환경의 함수는 그렇지 않을 경우가 많음
- 그때 그때 상태에 따라 달라지므로
모노이드
- 결합법칙
- 항등원
옵션 모나드
- 값 유무, 에러 유무를 다루기 편한 무언가.
- 예외처리에 대한 결합
2.3 함수형 프로그래밍 도입하기
웹서비스가 처리할 일들
- HTTP API 서비스
- JSON 인코딩/디코딩
- RDB 등의 데이터베이스에 쓰고 읽기
명령형 언어에서 함수형 프로그래밍 가능
- 함수도 값으로 다루기, 고차함수 활용, 함수 조합
- 효과를 일으키는 프로시져와 순수함수를 분리
'programming study > Conference' 카테고리의 다른 글
liftIO 2021(2) (0) | 2021.11.05 |
---|