SlideShare a Scribd company logo
1 of 24
함수형 프로그래밍 1부
(Functional
Programming)
“일반적인 프로그래밍은 그냥 생각하면 되는 것이고,
함수형 프로그래밍은 기존과 다르게 생각하는 방법을
알려줄 것이다.
그러므로 당신은 예전 방식으로
절대 돌아가지 않을 것이다.”
함수형 프로그래밍이 주목 받는
이유
병렬 컴퓨팅 환경의 발달
무어의 법칙 종결
“컴퓨터에서 사용하는 반도체 회로 성능은 18개월마다
2배로 빨라진다”
함수형 프로그래밍이
란?
“함수형 프로그래밍은 대입문(assignment statements) 없
이
프로그래밍을 하는 것이다.”
선언형 프로그래밍
(What)
“선언형 프로그래밍은 프로그램이 함수형, 논리형, 제한형
프로그래밍 언어로 쓰인 경우에 "선언형"이라고 한다.
선언형 프로그램은 목표를 명시하고 알고리즘을 명시하지 않는 것이다”
함수형 프로그래밍 언
어란?
적극적이고 격렬하게
부작용을 적대하는 언어
“함수 또는 표현식은 값을 반환하는 것 외에도 일부 상태를 수정하
거나 호출 또는 외부 세계와 관찰 가능한 상호 작용이있는 경우 부
작용이 있다고 한다.”
부작용이란(Side
Effect)?
APL, ATS, CAL,
C#, D,DART,
Curl,
ECMScript,
Erlang, F#, FPr,
J, Java(8), Lisp,
ML, Opal,
Python, Q, R,
Ruby, REFAL,
Rust, Scala,
Swift …
Agda, Charity,
Clean,Coq,
Curry, Elm, Frege,
Haskell,
Hope, Joy, Mercury
…
Pure Impure
불가능
var x = 0;
x = x+1;
한번 만들어진 값은 변하지 않는
다
기존값을 바꾸지 않고, 기존값을 포함한 새로운 값을 만든
다.
“관찰 가능한 부작용을 제거”
부작용을 격렬하게
적대하기 위해서는?
“함수의 실행이 외부에 영향을 끼치지 않기 때문에 디버깅이 쉽다”
func add(x:int, y:int) {
return x+y }
Pure Function
(부작용이 없는 함수)
“환경, 조건에 관계 없이 같은 함수를 호출 하면
항상 같은 값을 반환”
참조 투명성
(Referential
Transparency)
순수 함수는 하나 이상
의 매개변수를 가진다.
“입력값이 없는 함수는 항상 같은 값을 반환하거나,
다른 곳에서 입력을 받는다”
순수 함수는 반환값이
있어야 한다
“반환값이 없는 함수는 부작용이 있거나,
아무 의미없는 함수이다.”
루프를 사용하지 않는
다
“재귀함수, Higher-Order Function(고차함수)
map, filter, reduce 등을 활용”
“함수를 매개변수로 받거나
반환하는 함수”
고차함수
(Higher-Order
Function)
Imperative Implementation
let array = [1,2,3,4,5]
for i in array {
print(i*i) // 1,4,9,16,25
}
Declarative Implementation
print(array.map { $0*$0 }) // 1,4,9,16,25
map(Swift 3)
“Lamda, Monad, Category Theory 등
함수형 프로그래밍의 근간에 대해”
What’s next

More Related Content

Viewers also liked

Functional Reactive Programming With RxSwift
Functional Reactive Programming With RxSwiftFunctional Reactive Programming With RxSwift
Functional Reactive Programming With RxSwift선협 이
 
Functional Reactive Programming with RxJS
Functional Reactive Programming with RxJSFunctional Reactive Programming with RxJS
Functional Reactive Programming with RxJSstefanmayer13
 
서버 개발자가 바라 본 Functional Reactive Programming with RxJava - SpringCamp2015
서버 개발자가 바라 본 Functional Reactive Programming with RxJava - SpringCamp2015서버 개발자가 바라 본 Functional Reactive Programming with RxJava - SpringCamp2015
서버 개발자가 바라 본 Functional Reactive Programming with RxJava - SpringCamp2015NAVER / MusicPlatform
 
NDC14 - Rx와 Functional Reactive Programming으로 고성능 서버 만들기
NDC14 - Rx와 Functional Reactive Programming으로 고성능 서버 만들기NDC14 - Rx와 Functional Reactive Programming으로 고성능 서버 만들기
NDC14 - Rx와 Functional Reactive Programming으로 고성능 서버 만들기Jong Wook Kim
 
java 8 람다식 소개와 의미 고찰
java 8 람다식 소개와 의미 고찰java 8 람다식 소개와 의미 고찰
java 8 람다식 소개와 의미 고찰Sungchul Park
 
RxJS and Reactive Programming - Modern Web UI - May 2015
RxJS and Reactive Programming - Modern Web UI - May 2015RxJS and Reactive Programming - Modern Web UI - May 2015
RxJS and Reactive Programming - Modern Web UI - May 2015Ben Lesh
 

Viewers also liked (6)

Functional Reactive Programming With RxSwift
Functional Reactive Programming With RxSwiftFunctional Reactive Programming With RxSwift
Functional Reactive Programming With RxSwift
 
Functional Reactive Programming with RxJS
Functional Reactive Programming with RxJSFunctional Reactive Programming with RxJS
Functional Reactive Programming with RxJS
 
서버 개발자가 바라 본 Functional Reactive Programming with RxJava - SpringCamp2015
서버 개발자가 바라 본 Functional Reactive Programming with RxJava - SpringCamp2015서버 개발자가 바라 본 Functional Reactive Programming with RxJava - SpringCamp2015
서버 개발자가 바라 본 Functional Reactive Programming with RxJava - SpringCamp2015
 
NDC14 - Rx와 Functional Reactive Programming으로 고성능 서버 만들기
NDC14 - Rx와 Functional Reactive Programming으로 고성능 서버 만들기NDC14 - Rx와 Functional Reactive Programming으로 고성능 서버 만들기
NDC14 - Rx와 Functional Reactive Programming으로 고성능 서버 만들기
 
java 8 람다식 소개와 의미 고찰
java 8 람다식 소개와 의미 고찰java 8 람다식 소개와 의미 고찰
java 8 람다식 소개와 의미 고찰
 
RxJS and Reactive Programming - Modern Web UI - May 2015
RxJS and Reactive Programming - Modern Web UI - May 2015RxJS and Reactive Programming - Modern Web UI - May 2015
RxJS and Reactive Programming - Modern Web UI - May 2015
 

Similar to Functional Programming 01

Functional Kotlin makes Kotlin functional
Functional Kotlin makes Kotlin functionalFunctional Kotlin makes Kotlin functional
Functional Kotlin makes Kotlin functionalHyunWoo Lee
 
클로져 소개 강의 (한국정보통신산업노동조합)
클로져 소개 강의 (한국정보통신산업노동조합)클로져 소개 강의 (한국정보통신산업노동조합)
클로져 소개 강의 (한국정보통신산업노동조합)Sang-Kyu Park
 
소프트웨어 중심 시대를 준비하자
소프트웨어 중심 시대를 준비하자소프트웨어 중심 시대를 준비하자
소프트웨어 중심 시대를 준비하자Deogtae Kim
 
컴파일러 Ch01
컴파일러 Ch01컴파일러 Ch01
컴파일러 Ch01Hankyo
 
​『함수형 반응형 프로그래밍』 맛보기
​『함수형 반응형 프로그래밍』 맛보기​『함수형 반응형 프로그래밍』 맛보기
​『함수형 반응형 프로그래밍』 맛보기복연 이
 
Concurreny programming
Concurreny programmingConcurreny programming
Concurreny programmingJaejin Yun
 
[부스트캠프 웹・모바일 7기 Tech Talk]김지원_너와 나의 함수형 프로그래밍
[부스트캠프 웹・모바일 7기 Tech Talk]김지원_너와 나의 함수형 프로그래밍[부스트캠프 웹・모바일 7기 Tech Talk]김지원_너와 나의 함수형 프로그래밍
[부스트캠프 웹・모바일 7기 Tech Talk]김지원_너와 나의 함수형 프로그래밍CONNECT FOUNDATION
 

Similar to Functional Programming 01 (8)

팀장 잔소리
팀장 잔소리팀장 잔소리
팀장 잔소리
 
Functional Kotlin makes Kotlin functional
Functional Kotlin makes Kotlin functionalFunctional Kotlin makes Kotlin functional
Functional Kotlin makes Kotlin functional
 
클로져 소개 강의 (한국정보통신산업노동조합)
클로져 소개 강의 (한국정보통신산업노동조합)클로져 소개 강의 (한국정보통신산업노동조합)
클로져 소개 강의 (한국정보통신산업노동조합)
 
소프트웨어 중심 시대를 준비하자
소프트웨어 중심 시대를 준비하자소프트웨어 중심 시대를 준비하자
소프트웨어 중심 시대를 준비하자
 
컴파일러 Ch01
컴파일러 Ch01컴파일러 Ch01
컴파일러 Ch01
 
​『함수형 반응형 프로그래밍』 맛보기
​『함수형 반응형 프로그래밍』 맛보기​『함수형 반응형 프로그래밍』 맛보기
​『함수형 반응형 프로그래밍』 맛보기
 
Concurreny programming
Concurreny programmingConcurreny programming
Concurreny programming
 
[부스트캠프 웹・모바일 7기 Tech Talk]김지원_너와 나의 함수형 프로그래밍
[부스트캠프 웹・모바일 7기 Tech Talk]김지원_너와 나의 함수형 프로그래밍[부스트캠프 웹・모바일 7기 Tech Talk]김지원_너와 나의 함수형 프로그래밍
[부스트캠프 웹・모바일 7기 Tech Talk]김지원_너와 나의 함수형 프로그래밍
 

Functional Programming 01