본문 바로가기

programming study/Conference

liftIO 2021(1)

국내의 함수형 개발자 커뮤니티를 빌딩하기 위한 첫 걸음

김상현님, 김대현님, 김은민님, 박지수님

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