SlideShare a Scribd company logo
FINDING
FUNCTIONAL PROGRAMMING
권문범 / 네이버앱개발
MB.KYLE@NAVERCORP.COM
FUNCTIONAL PROGRAMMING
PROGRAMMING
✦ Imperative programming
✦ Procedural programming
✦ Object Oriented programming
✦ Declarative programming
✦ Functional programming
✦ Logic programming
함수 ‘형’을 찾아서
FUNCTIONAL PROGRAMMING
FUNFUN

STUDY
FUNCTIONAL PROGRAMMING
OO MAKES CODE UNDERSTANDABLE BY
ENCAPSULATING MOVING PARTS
Micael Feathers
FUNCTIONAL PROGRAMMING
FP MAKES CODE UNDERSTANDABLE BY
MINIMIZING MOVING CODE PARTS
Micael Feathers
FUNCTIONAL PROGRAMMING
FUNCTIONAL PROGRAMMING
OBJECT ORIENTED PROGRAMMING
✦ 객체 기반
✦ Object = field (variable) + method (function)
✦ 메소드는 객체 내부 변수를 참조하여 return value를 생성
✦ 개념
✦ Polymorphism, Inheritance, Encapsulation
✦ 설계원칙
✦ 디자인 패턴, SOLID
FUNCTIONAL PROGRAMMING
OBJECT ORIENTED PROGRAMMING
✦ 장점
✦ 현실 세계를 반영한 객체 기반의 설계
✦ 코드에 대한 이해도가 빠름
✦ 대규모 시스템 설계에서 유리
✦ 단점
✦ 공유 자원에 대한 race condition
✦ Dead lock, Starvation 등
FUNCTIONAL PROGRAMMING
FUNCTIONAL PROGRAMMING
✦ 함수 기반
✦ 수학의 함수와 비슷, ‘f(x) = y’
✦ 단, 함수는 매개변수를 제외한 다른 외부변수를 참조하지 않는다.
✦ x에 대한 함수의 출력은 항상 f(x)
✦ 설계 목적
✦ 각 함수에 대한 참조 무결성을 보장
✦ 병렬, 비동기 처리에 대한 내성 강화
THE REASON WHY WE SHOULD DO
FUNCTIONAL PROGRAMMING IS….
Neal Ford
FUNCTIONAL PROGRAMMING
FUNCTIONAL PROGRAMMING IS
SIMPLER THAN OBJECT ORIENTED
PROGRAMMING.
Neal Ford
FUNCTIONAL PROGRAMMING
FUNCTIONAL PROGRAMMING
OOP
✦ Method : running
✦ The implements of running method is depend on the kind of subclass.
MEN’S RUNNING DOG’S RUNNING BIRD’S RUNNING
ANIMAL’S RUNNING
FUNCTIONAL PROGRAMMING
FP
✦ Method : running
✦ The running function is independent
✦ The running function does not have any data.
✦ It makes risks minimized in FP
‘MEN’ ‘DOG’ ‘BIRD’
FUNCTION RUNNING
(ANIMAL)
FUNCTIONAL PROGRAMMING
FP
✦ 제거 대상
✦ Local variable
✦ Loop
✦ Assignment
FUNCTIONAL PROGRAMMING
PROGRAMMING
✦ 구구단을 출력하시오.
FUNCTIONAL PROGRAMMING
PROGRAMMING
✦ 구구단을 출력하시오.
✦ More problems
✦ https://github.com/funfunStudy/algorithm
FUNCTIONAL PROGRAMMING
LAMBDA
✦ 추상화, 변수 바인딩에 기반한 함수 표현식 -> 익명 함수
✦ 함수
✦ 일반 함수 -> f1(x, y) = z
✦ 항등 함수 -> f2(x) = x
✦ High-order function -> f1(x, y) = z -> f1(f2(x), y) = z
✦ Curring -> f1(x, y) = z, f1(z, y) = a -> f1(f1(x, y), y) = a
FUNCTIONAL PROGRAMMING
CLOSURE
✦ 함수형 객체
✦ Context capturing
✦ 외부 변수를 내부에 캡쳐해서 사용
✦ 외부 변수에 대한 참조 무결성 지원
✦ Objective-C 2.0부터 block 형태로 지원
FUNCTIONAL PROGRAMMING
PARTIAL APPLICATION
✦ Application : 함수의 계산을 위해 매개변수를 바인딩하는 과정
✦ Partial application : 매개변수 중 일부만 적용, 지연연산 처리에 응용
FUNCTIONAL PROGRAMMING
CURRYING
✦ Partial application과 비슷
✦ 일부 인자를 미리 binding 하는 partial application과 다르게 단일 인자만 고정
✦ Partial applciation의 차이
✦ Partial application : f1(x, y, z), f2(x, y) -> f1(f2(x, y), z)
✦ Currying : f1(x, y) = z, f1(z, y) = a -> f1(f1(x, y), y) = a
✦ Swift에서 미지원
✦ pod ‘Curry’
FUNCTIONAL PROGRAMMING
HIGH-ORDER FUNCTION
✦ 함수를 매개변수로 받을 수 있는 함수
✦ 함수를 return할 수 있는 함수
✦ map : (T) -> U
✦ flatten : ([[T], [U]]) -> [T, U]
✦ filter : ([A, B, C]) -> [A]
✦ reduce : (T , [A, B, C]) -> D
✦ Etc.
FUNCTIONAL PROGRAMMING
FUNCTOR
✦ 값을 캡슐화한 자료구조
✦ Context + value + map
✦ Type 자체를 추상화
✦ 내부의 값이 무언인지 모름
✦ 심지어 값이 비어 있을 수 있다
✦ map 함수를 지원
✦ T -> U
✦ Type으로부터 안전하고 내부의 값만 map을 통해서 변경 가능
FUNCTIONAL PROGRAMMING
MONAD
✦ 역시 값을 캡슐화한 자료구조
✦ Context + value + flatMap
✦ 역시 Type 자체를 추상화
✦ 하지만 flatMap 함수를 지원
✦ flatten : 1차원 위상화 [[x], [y], z] -> [x, y, z]
✦ map : T -> U
✦ Type으로부터 안전하고 내부의 값만 map을 통해서 변경 가능
FUNCTIONAL PROGRAMMING
MONAD
✦ 역시 값을 캡슐화한 자료구조
✦ Context + value + flatMap
✦ 역시 Type 자체를 추상화
✦ 하지만 flatMap 함수를 지원
✦ flatten : 1차원 위상화 ex) [Optional(Optional(.some)), Optional(.none), z] -> [some, nil, z]
✦ map : T -> U
✦ Type으로부터 안전하고 내부의 값만 map을 통해서 변경 가능
✦ 중첩되어 있는 context에 대한 유연한 대처 가능 - Context(Context(Context(value))) -> Context(value)
FUNCTIONAL PROGRAMMING
MONAD
✦ 실제 Alamofire의 ‘Result.swift’를 확인
✦ success 안에 의미 있는 value
✦ failure 안에는 error
✦ failure context의 경우 : chaining에 따른 처리를 하지
않고 Error만을 return
✦ success context의 경우 : value를 chaining에 따른
처리를 통해 변경 최종 context에서 의미있는 value를
획득 가능
LET’S MAKE A CODE
DETAIL ABOUT FP

ON SHARE
FUNCTIONAL PROGRAMMING
TELL US
WHATEVER YOU WANT
IOS MEETUP
THANK YOU

More Related Content

PPTX
자바스크립트.
PPTX
튜터링 #9 20120409
PPTX
C언어 세미나 - 함수
PDF
이산수학 C1 프로젝트 3
PDF
[C++ Korea] Effective Modern C++ MVA item 8 Prefer nullptr to 0 and null +윤석준
PDF
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기
PDF
이산수학03
PDF
[C++ korea] effective modern c++ study item 7 distinguish between () and {} w...
자바스크립트.
튜터링 #9 20120409
C언어 세미나 - 함수
이산수학 C1 프로젝트 3
[C++ Korea] Effective Modern C++ MVA item 8 Prefer nullptr to 0 and null +윤석준
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기
이산수학03
[C++ korea] effective modern c++ study item 7 distinguish between () and {} w...

What's hot (20)

PPTX
Changes in c++0x
PDF
10. pointer & function
PDF
[C++ Korea] Effective Modern C++ mva item 7 distinguish between and {} when c...
PDF
이산치6보고서
PDF
[C++ korea] effective modern c++ study item 14 declare functions noexcept if ...
PDF
2012 Dm C2 04
PDF
[C++ korea] Effective Modern C++ 신촌 Study Item20,21,23
PDF
[C++ Korea] Effective Modern C++ MVA item 9 Prefer alias declarations to type...
PDF
W14 chap13
PDF
Template at c++
PPTX
[C++ korea] effective modern c++ study item8~10 정은식
PDF
[C++ Korea] Effective Modern C++ Study item14 16 +신촌
PPTX
RNC C++ lecture_2 operator, if
PDF
[C++ Korea] Effective Modern C++ Study, Item 1 - 3
PDF
[C++ korea] Effective Modern C++ study item 19 use shared ptr for shared owne...
PDF
Ch10
PDF
자바8 스트림 API 소개
PDF
[C++ Korea] Effective Modern C++ Study item 24-26
PDF
2 1. variables & data types
PDF
[C++ korea] effective modern c++ study item 17 19 신촌 study
Changes in c++0x
10. pointer & function
[C++ Korea] Effective Modern C++ mva item 7 distinguish between and {} when c...
이산치6보고서
[C++ korea] effective modern c++ study item 14 declare functions noexcept if ...
2012 Dm C2 04
[C++ korea] Effective Modern C++ 신촌 Study Item20,21,23
[C++ Korea] Effective Modern C++ MVA item 9 Prefer alias declarations to type...
W14 chap13
Template at c++
[C++ korea] effective modern c++ study item8~10 정은식
[C++ Korea] Effective Modern C++ Study item14 16 +신촌
RNC C++ lecture_2 operator, if
[C++ Korea] Effective Modern C++ Study, Item 1 - 3
[C++ korea] Effective Modern C++ study item 19 use shared ptr for shared owne...
Ch10
자바8 스트림 API 소개
[C++ Korea] Effective Modern C++ Study item 24-26
2 1. variables & data types
[C++ korea] effective modern c++ study item 17 19 신촌 study
Ad

Similar to Finding Functional Programming (20)

PPTX
PDF
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
PDF
개발자를 위한 공감세미나 tensor-flow
PDF
C++에서 Objective-C까지
PPTX
Domain Specific Languages With Groovy
PDF
GopherCon Korea 2015 - Python 개발자를 위한 Go (이경찬)
PPTX
DEVIEW-FULL-감독판.pptx
PPTX
Kotlin with fp
PPTX
Python programming for Bioinformatics
PPTX
자바스크립트 함수
PPTX
introduce of Hadoop map reduce
PDF
스위프트 성능 이해하기
PPTX
파이썬+함수이해하기 20160229
PPTX
호서대학교 - 다양한 오픈소스 활용법 (Colab을 이용하여)
PDF
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
PDF
함수형 프로그래밍
PPTX
파이썬 언어 기초
PPTX
함수형 사고 - Functional thinking
PPTX
영상 데이터의 처리와 정보의 추출
PPTX
Hacosa js study 4주차
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
개발자를 위한 공감세미나 tensor-flow
C++에서 Objective-C까지
Domain Specific Languages With Groovy
GopherCon Korea 2015 - Python 개발자를 위한 Go (이경찬)
DEVIEW-FULL-감독판.pptx
Kotlin with fp
Python programming for Bioinformatics
자바스크립트 함수
introduce of Hadoop map reduce
스위프트 성능 이해하기
파이썬+함수이해하기 20160229
호서대학교 - 다양한 오픈소스 활용법 (Colab을 이용하여)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
함수형 프로그래밍
파이썬 언어 기초
함수형 사고 - Functional thinking
영상 데이터의 처리와 정보의 추출
Hacosa js study 4주차
Ad

More from NAVER Engineering (20)

PDF
React vac pattern
PDF
디자인 시스템에 직방 ZUIX
PDF
진화하는 디자인 시스템(걸음마 편)
PDF
서비스 운영을 위한 디자인시스템 프로젝트
PDF
BPL(Banksalad Product Language) 무야호
PDF
이번 생에 디자인 시스템은 처음이라
PDF
날고 있는 여러 비행기 넘나 들며 정비하기
PDF
쏘카프레임 구축 배경과 과정
PDF
플랫폼 디자이너 없이 디자인 시스템을 구축하는 프로덕트 디자이너의 우당탕탕 고통 연대기
PDF
200820 NAVER TECH CONCERT 15_Code Review is Horse(코드리뷰는 말이야)(feat.Latte)
PDF
200819 NAVER TECH CONCERT 03_화려한 코루틴이 내 앱을 감싸네! 코루틴으로 작성해보는 깔끔한 비동기 코드
PDF
200819 NAVER TECH CONCERT 10_맥북에서도 아이맥프로에서 빌드하는 것처럼 빌드 속도 빠르게 하기
PDF
200819 NAVER TECH CONCERT 08_성능을 고민하는 슬기로운 개발자 생활
PDF
200819 NAVER TECH CONCERT 05_모르면 손해보는 Android 디버깅/분석 꿀팁 대방출
PDF
200819 NAVER TECH CONCERT 09_Case.xcodeproj - 좋은 동료로 거듭나기 위한 노하우
PDF
200820 NAVER TECH CONCERT 14_야 너두 할 수 있어. 비전공자, COBOL 개발자를 거쳐 네이버에서 FE 개발하게 된...
PDF
200820 NAVER TECH CONCERT 13_네이버에서 오픈 소스 개발을 통해 성장하는 방법
PDF
200820 NAVER TECH CONCERT 12_상반기 네이버 인턴을 돌아보며
PDF
200820 NAVER TECH CONCERT 11_빠르게 성장하는 슈퍼루키로 거듭나기
PDF
200819 NAVER TECH CONCERT 07_신입 iOS 개발자 개발업무 적응기
React vac pattern
디자인 시스템에 직방 ZUIX
진화하는 디자인 시스템(걸음마 편)
서비스 운영을 위한 디자인시스템 프로젝트
BPL(Banksalad Product Language) 무야호
이번 생에 디자인 시스템은 처음이라
날고 있는 여러 비행기 넘나 들며 정비하기
쏘카프레임 구축 배경과 과정
플랫폼 디자이너 없이 디자인 시스템을 구축하는 프로덕트 디자이너의 우당탕탕 고통 연대기
200820 NAVER TECH CONCERT 15_Code Review is Horse(코드리뷰는 말이야)(feat.Latte)
200819 NAVER TECH CONCERT 03_화려한 코루틴이 내 앱을 감싸네! 코루틴으로 작성해보는 깔끔한 비동기 코드
200819 NAVER TECH CONCERT 10_맥북에서도 아이맥프로에서 빌드하는 것처럼 빌드 속도 빠르게 하기
200819 NAVER TECH CONCERT 08_성능을 고민하는 슬기로운 개발자 생활
200819 NAVER TECH CONCERT 05_모르면 손해보는 Android 디버깅/분석 꿀팁 대방출
200819 NAVER TECH CONCERT 09_Case.xcodeproj - 좋은 동료로 거듭나기 위한 노하우
200820 NAVER TECH CONCERT 14_야 너두 할 수 있어. 비전공자, COBOL 개발자를 거쳐 네이버에서 FE 개발하게 된...
200820 NAVER TECH CONCERT 13_네이버에서 오픈 소스 개발을 통해 성장하는 방법
200820 NAVER TECH CONCERT 12_상반기 네이버 인턴을 돌아보며
200820 NAVER TECH CONCERT 11_빠르게 성장하는 슈퍼루키로 거듭나기
200819 NAVER TECH CONCERT 07_신입 iOS 개발자 개발업무 적응기

Finding Functional Programming

  • 1. FINDING FUNCTIONAL PROGRAMMING 권문범 / 네이버앱개발 MB.KYLE@NAVERCORP.COM
  • 2. FUNCTIONAL PROGRAMMING PROGRAMMING ✦ Imperative programming ✦ Procedural programming ✦ Object Oriented programming ✦ Declarative programming ✦ Functional programming ✦ Logic programming
  • 5. OO MAKES CODE UNDERSTANDABLE BY ENCAPSULATING MOVING PARTS Micael Feathers FUNCTIONAL PROGRAMMING
  • 6. FP MAKES CODE UNDERSTANDABLE BY MINIMIZING MOVING CODE PARTS Micael Feathers FUNCTIONAL PROGRAMMING
  • 7. FUNCTIONAL PROGRAMMING OBJECT ORIENTED PROGRAMMING ✦ 객체 기반 ✦ Object = field (variable) + method (function) ✦ 메소드는 객체 내부 변수를 참조하여 return value를 생성 ✦ 개념 ✦ Polymorphism, Inheritance, Encapsulation ✦ 설계원칙 ✦ 디자인 패턴, SOLID
  • 8. FUNCTIONAL PROGRAMMING OBJECT ORIENTED PROGRAMMING ✦ 장점 ✦ 현실 세계를 반영한 객체 기반의 설계 ✦ 코드에 대한 이해도가 빠름 ✦ 대규모 시스템 설계에서 유리 ✦ 단점 ✦ 공유 자원에 대한 race condition ✦ Dead lock, Starvation 등
  • 9. FUNCTIONAL PROGRAMMING FUNCTIONAL PROGRAMMING ✦ 함수 기반 ✦ 수학의 함수와 비슷, ‘f(x) = y’ ✦ 단, 함수는 매개변수를 제외한 다른 외부변수를 참조하지 않는다. ✦ x에 대한 함수의 출력은 항상 f(x) ✦ 설계 목적 ✦ 각 함수에 대한 참조 무결성을 보장 ✦ 병렬, 비동기 처리에 대한 내성 강화
  • 10. THE REASON WHY WE SHOULD DO FUNCTIONAL PROGRAMMING IS…. Neal Ford FUNCTIONAL PROGRAMMING
  • 11. FUNCTIONAL PROGRAMMING IS SIMPLER THAN OBJECT ORIENTED PROGRAMMING. Neal Ford FUNCTIONAL PROGRAMMING
  • 12. FUNCTIONAL PROGRAMMING OOP ✦ Method : running ✦ The implements of running method is depend on the kind of subclass. MEN’S RUNNING DOG’S RUNNING BIRD’S RUNNING ANIMAL’S RUNNING
  • 13. FUNCTIONAL PROGRAMMING FP ✦ Method : running ✦ The running function is independent ✦ The running function does not have any data. ✦ It makes risks minimized in FP ‘MEN’ ‘DOG’ ‘BIRD’ FUNCTION RUNNING (ANIMAL)
  • 14. FUNCTIONAL PROGRAMMING FP ✦ 제거 대상 ✦ Local variable ✦ Loop ✦ Assignment
  • 16. FUNCTIONAL PROGRAMMING PROGRAMMING ✦ 구구단을 출력하시오. ✦ More problems ✦ https://github.com/funfunStudy/algorithm
  • 17. FUNCTIONAL PROGRAMMING LAMBDA ✦ 추상화, 변수 바인딩에 기반한 함수 표현식 -> 익명 함수 ✦ 함수 ✦ 일반 함수 -> f1(x, y) = z ✦ 항등 함수 -> f2(x) = x ✦ High-order function -> f1(x, y) = z -> f1(f2(x), y) = z ✦ Curring -> f1(x, y) = z, f1(z, y) = a -> f1(f1(x, y), y) = a
  • 18. FUNCTIONAL PROGRAMMING CLOSURE ✦ 함수형 객체 ✦ Context capturing ✦ 외부 변수를 내부에 캡쳐해서 사용 ✦ 외부 변수에 대한 참조 무결성 지원 ✦ Objective-C 2.0부터 block 형태로 지원
  • 19. FUNCTIONAL PROGRAMMING PARTIAL APPLICATION ✦ Application : 함수의 계산을 위해 매개변수를 바인딩하는 과정 ✦ Partial application : 매개변수 중 일부만 적용, 지연연산 처리에 응용
  • 20. FUNCTIONAL PROGRAMMING CURRYING ✦ Partial application과 비슷 ✦ 일부 인자를 미리 binding 하는 partial application과 다르게 단일 인자만 고정 ✦ Partial applciation의 차이 ✦ Partial application : f1(x, y, z), f2(x, y) -> f1(f2(x, y), z) ✦ Currying : f1(x, y) = z, f1(z, y) = a -> f1(f1(x, y), y) = a ✦ Swift에서 미지원 ✦ pod ‘Curry’
  • 21. FUNCTIONAL PROGRAMMING HIGH-ORDER FUNCTION ✦ 함수를 매개변수로 받을 수 있는 함수 ✦ 함수를 return할 수 있는 함수 ✦ map : (T) -> U ✦ flatten : ([[T], [U]]) -> [T, U] ✦ filter : ([A, B, C]) -> [A] ✦ reduce : (T , [A, B, C]) -> D ✦ Etc.
  • 22. FUNCTIONAL PROGRAMMING FUNCTOR ✦ 값을 캡슐화한 자료구조 ✦ Context + value + map ✦ Type 자체를 추상화 ✦ 내부의 값이 무언인지 모름 ✦ 심지어 값이 비어 있을 수 있다 ✦ map 함수를 지원 ✦ T -> U ✦ Type으로부터 안전하고 내부의 값만 map을 통해서 변경 가능
  • 23. FUNCTIONAL PROGRAMMING MONAD ✦ 역시 값을 캡슐화한 자료구조 ✦ Context + value + flatMap ✦ 역시 Type 자체를 추상화 ✦ 하지만 flatMap 함수를 지원 ✦ flatten : 1차원 위상화 [[x], [y], z] -> [x, y, z] ✦ map : T -> U ✦ Type으로부터 안전하고 내부의 값만 map을 통해서 변경 가능
  • 24. FUNCTIONAL PROGRAMMING MONAD ✦ 역시 값을 캡슐화한 자료구조 ✦ Context + value + flatMap ✦ 역시 Type 자체를 추상화 ✦ 하지만 flatMap 함수를 지원 ✦ flatten : 1차원 위상화 ex) [Optional(Optional(.some)), Optional(.none), z] -> [some, nil, z] ✦ map : T -> U ✦ Type으로부터 안전하고 내부의 값만 map을 통해서 변경 가능 ✦ 중첩되어 있는 context에 대한 유연한 대처 가능 - Context(Context(Context(value))) -> Context(value)
  • 25. FUNCTIONAL PROGRAMMING MONAD ✦ 실제 Alamofire의 ‘Result.swift’를 확인 ✦ success 안에 의미 있는 value ✦ failure 안에는 error ✦ failure context의 경우 : chaining에 따른 처리를 하지 않고 Error만을 return ✦ success context의 경우 : value를 chaining에 따른 처리를 통해 변경 최종 context에서 의미있는 value를 획득 가능
  • 27. DETAIL ABOUT FP
 ON SHARE FUNCTIONAL PROGRAMMING
  • 28. TELL US WHATEVER YOU WANT IOS MEETUP