SlideShare a Scribd company logo
@l2hyunwoo
KotlinConf’23 Global in Songdo
Mathpresso Inc. Android/React Native Developer
Functional Kotlin
Makes
Kotlin functional
HyunWoo Lee
함수형 프로그래밍과 오해
Lambda Algebra Monoid
Functor / Applicative Functor Tail recursion
Currying
함수형 프로그래밍과 오해
Lambda Algebra Monoid
Functor / Applicative Functor Tail recursion
Currying
정말 이게 실제 개발에 의미가 있을까요?
함수형 프로그래밍 접근
목적을 이해하고
어떻게 사용해야할 지 알아야 하며
그 이후에 무엇이 있는 지 파악해도 늦지 않다
Why we should use it?
함수형 프로그래밍을 활용하면
코드를 간결하게 작성할 수 있고 기능의 확장이 쉬우며
보다 안전한 코드를 작성할 수 있다
간결한 코드 작성하기
간결한 코드 작성하기
간결한 코드 작성하기
간결한 코드 작성하기
변동을 줄이면서 안정성 높이기
변동을 줄이면서 안정성 높이기
변동을 줄이면서 안정성 높이기
객체/외부 상태의
변동이 있는 부분은
블록 Scope으로
격리한다
잠깐! 이거 함수형 프로그래밍이 맞나요?
Functional Programming is sometimes treated as synonymous with
Purely functional programming.
When a pure function is called with some given arguments,
it will always return the same result,
and cannot be affected by any mutable state or other side effect.
-
Hudak, Paul (Conception, evolution and application of functional programming lauguages)
Pure Function and Side Effect
function sum(x: int, y: int)
Pure Function and Side Effect
function sum(x: int, y: int)
(
2, 5
)
Pure Function and Side Effect
function sum(x: int, y: int)
(
2, 5
)
7
function sum(x: int, y: int)
(
2, 5
)
7
입력이 동일하면
결과가 항상 같은 함수를
순수 함수
(
Pure Function)
라 한다
Pure Function and Side Effect
Pure Function and Side Effect
function sumWithSideEffect(x: int, y: int)
Pure Function and Side Effect
function sumWithSideEffect(x: int, y: int)
(
2, 5
)
1st
Pure Function and Side Effect
function sumWithSideEffect(x: int, y: int)
(
2, 5
)
7
1st
Pure Function and Side Effect
function sumWithSideEffect(x: int, y: int)
(
3, 6
)
2nd
Pure Function and Side Effect
function sumWithSideEffect(x: int, y: int)
(
3, 6
)
2nd
16
Pure Function and Side Effect
function sumWithSideEffect(x: int, y: int)
(
3, 6
)
2nd
16
Pure Function and Side Effect
Pure Function and Side Effect
함수 내에서 관장하지 않는,
전역 상태/변수 혹은 (파일, 화면) 입출력등을 포함한
외부 상태에 영향을 줄 수 있고 이를 관찰하는 행위를 포함하는 함수를
Side Effect라 한다.
Pure Function and Side Effect
함수형 프로그래밍을 활용하면
코드를 간결하게 작성할 수 있고 기능의 확장이 쉬우며
보다 안전한 코드를 작성할 수 있다
Pure Function and Side Effect
순수함수를 사용하면 동일한 결과를 예측할 수 있으므로 (참조 투명성)
함수 그 자체를 모듈화된 기능으로 사용할 수 있다.
또한 외부 가변 상태를 변경하지 않으므로
동시성 프로그래밍에서 공유 자원 변경에 대한 관심사를 제할 수 있다.
이런 이점으로 함수형 프로그래밍에서는 순수 함수의 사용을 지향한다.
Aspect of Functional Programming
그러면 순수 함수만을 사용하는 것이
함수형 프로그래밍 방식일까?
Aspect of Functional Programming
그렇기는 하나,
그래가지곤 간단한 기능 하나조차
제대로 만들 수 없다
Aspect of Functional Programming
외부 세계를 변경을 시켜야 하나
변경을 시키는 부분을 최소화하고 구분(격리)시키자
변동을 줄이면서 안정성 높이기
객체/외부 상태의
변동이 있는 부분은
블록 Scope으로
격리한다
고차함수를 활용한 기능 확장
고차함수를 활용한 기능 확장
CSV가 아닌 다른 파일 형식
혹은 Plain Text로 Append
하는 기능이 추가된다면?
고차함수를 활용한 기능 확장
객체를 String으로 전환하는 로직을
외부에서 주입시켜
공통 로직에 다형성을 제공
중간 점검
을 이해하고
사용해야할 지 알아야 하며
그 이후에 무엇이 있는 지 파악해도 늦지 않다
목적
어떻게
중간 점검
→ 안정성, 유지보수성, 가독성 증가
→ 순수함수 활용, Side Effect 격리
목적
어떻게
More, Functional Programming
고차함수를 활용하여 재사용성을 끌어올리고
보다 더 안정적으로 프로그래밍을 하고 싶다면?
More, Functional Programming
고차함수를 활용하여 재사용성을 끌어올리고
보다 더 안정적으로 프로그래밍을 하고 싶다면?
고차함수를 활용하는 객체(객체 컨테이너)의
특성을 알고, 이를 활용하면 된다
Category Theory
고차함수를 활용하여 새로운 타입/기능을 제공하기 위해선
이를 구성하는 타입에 대해 알아야 한다.
함수형에 적절한 “컨테이너"
Monad
함수형에 적절한 “컨테이너"
Monad는 엔도펑터 카테고리의 모노이드
Monad
함수형에 적절한 “컨테이너"
Monad는 엔도펑터 카테고리의 모노이드
Monad
Category Theory
범주론
(
Category Theory)에서는 구조체
(
Object)와
구조체들간의 관계
(
Morphism, 사상)를 다룬다
Functor
두 카테고리 간의 함수이고
구조체는 구조체로, 함수는 함수로 대응시키는 함수
Functor
이러면 어디서 많이본 것 같지 않나요?
Functor
Functor의 중첩 문제
Monoid
위의 성질을 만족하는 카테고리
Monoid
위의 성질을 만족하는 카테고리
(연산중 어느 일부분을 먼저 수행하더라도 괜찮다 정도의 의미)
Monad
Monad
Monad
이 성질을 활용하여 중첩된 타입을 벗길 수 있다
Monad
flatMap 함수를 생각해보자!
Monad
Nested Optional로 가득찼던 코드도
Monad
Monad 응용: 여러 케이스를 한 쪽으로
Monad 응용: 여러 케이스를 한 쪽으로
에러 발생 시 에러 타입을 Monad 타입으로 한번 더 감싸준다면?
Monad를 활용한 상태 처리의 이점
Monad 내부 상태를 아는 것과 상관없이
개발자가 로직을 체이닝해도 문제가 없도록 처리
할 수 있다
Monad is Everywhere
Spring Reactor(Mono)
Monad is Everywhere
RxJava (Kotlin)
Monad is Everywhere
Monad is Everywhere
Kotlin Result
Monad is Everywhere
Compose Modifier
Thanks!
@l2hyunwoo
KotlinConf’23 Global in Songdo
Mathpresso Inc. Android/React Native Developer
Slido

More Related Content

PDF
About Functional Programming Paradigms
PPTX
Functional programming
PDF
Functional Programming
PPTX
Functional Programming 01
PDF
Finding Functional Programming
PDF
키트웍스_발표자료_김경수functional_programming240920.pdf
PDF
함수형 프로그래밍
PDF
함수형 프로그래밍
About Functional Programming Paradigms
Functional programming
Functional Programming
Functional Programming 01
Finding Functional Programming
키트웍스_발표자료_김경수functional_programming240920.pdf
함수형 프로그래밍
함수형 프로그래밍

Similar to Functional Kotlin makes Kotlin functional (20)

PDF
Functional programming
PDF
전산한마당 모나드.pdf
PDF
Pure Function and Rx
PDF
Pure Function and Honest Design
PPTX
함수형 프로그래밍
PDF
Why Functional Programming Matters
PPTX
[부스트캠프 웹・모바일 7기 Tech Talk]김지원_너와 나의 함수형 프로그래밍
PPTX
Functional programming
PDF
스칼라와 스파크 영혼의 듀오
PPTX
Monad programming
PPTX
파이썬 기초
PDF
함수형 프로그래밍? 그래서 어떻게
PPTX
Python 이해하기 20160815
PPTX
Startup JavaScript 6 - 함수, 스코프, 클로저
PPTX
클로저
PDF
외계어 스터디 3/5 function and object
PPTX
Feel functional
PPTX
파이썬+주요+용어+정리 20160304
PDF
하스켈 모나드
PDF
2.Startup JavaScript - 연산자
Functional programming
전산한마당 모나드.pdf
Pure Function and Rx
Pure Function and Honest Design
함수형 프로그래밍
Why Functional Programming Matters
[부스트캠프 웹・모바일 7기 Tech Talk]김지원_너와 나의 함수형 프로그래밍
Functional programming
스칼라와 스파크 영혼의 듀오
Monad programming
파이썬 기초
함수형 프로그래밍? 그래서 어떻게
Python 이해하기 20160815
Startup JavaScript 6 - 함수, 스코프, 클로저
클로저
외계어 스터디 3/5 function and object
Feel functional
파이썬+주요+용어+정리 20160304
하스켈 모나드
2.Startup JavaScript - 연산자
Ad

Functional Kotlin makes Kotlin functional