SlideShare a Scribd company logo
1 of 29
Download to read offline
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

What's hot

10. pointer & function
10. pointer & function10. pointer & function
10. pointer & function웅식 전
 
[C++ Korea] Effective Modern C++ mva item 7 distinguish between and {} when c...
[C++ Korea] Effective Modern C++ mva item 7 distinguish between and {} when c...[C++ Korea] Effective Modern C++ mva item 7 distinguish between and {} when c...
[C++ Korea] Effective Modern C++ mva item 7 distinguish between and {} when c...Seok-joon Yun
 
이산치6보고서
이산치6보고서이산치6보고서
이산치6보고서KimChangHoen
 
[C++ korea] effective modern c++ study item 14 declare functions noexcept if ...
[C++ korea] effective modern c++ study item 14 declare functions noexcept if ...[C++ korea] effective modern c++ study item 14 declare functions noexcept if ...
[C++ korea] effective modern c++ study item 14 declare functions noexcept if ...Seok-joon Yun
 
2012 Dm C2 04
2012 Dm C2 042012 Dm C2 04
2012 Dm C2 04seonhyung
 
[C++ korea] Effective Modern C++ 신촌 Study Item20,21,23
[C++ korea] Effective Modern C++ 신촌 Study Item20,21,23[C++ korea] Effective Modern C++ 신촌 Study Item20,21,23
[C++ korea] Effective Modern C++ 신촌 Study Item20,21,23Seok-joon Yun
 
[C++ Korea] Effective Modern C++ MVA item 9 Prefer alias declarations to type...
[C++ Korea] Effective Modern C++ MVA item 9 Prefer alias declarations to type...[C++ Korea] Effective Modern C++ MVA item 9 Prefer alias declarations to type...
[C++ Korea] Effective Modern C++ MVA item 9 Prefer alias declarations to type...Seok-joon Yun
 
Template at c++
Template at c++Template at c++
Template at c++Lusain Kim
 
[C++ korea] effective modern c++ study item8~10 정은식
[C++ korea] effective modern c++ study item8~10 정은식[C++ korea] effective modern c++ study item8~10 정은식
[C++ korea] effective modern c++ study item8~10 정은식은식 정
 
[C++ Korea] Effective Modern C++ Study item14 16 +신촌
[C++ Korea] Effective Modern C++ Study item14 16 +신촌[C++ Korea] Effective Modern C++ Study item14 16 +신촌
[C++ Korea] Effective Modern C++ Study item14 16 +신촌Seok-joon Yun
 
RNC C++ lecture_2 operator, if
RNC C++ lecture_2 operator, ifRNC C++ lecture_2 operator, if
RNC C++ lecture_2 operator, ifitlockit
 
[C++ Korea] Effective Modern C++ Study, Item 1 - 3
[C++ Korea] Effective Modern C++ Study, Item 1 - 3[C++ Korea] Effective Modern C++ Study, Item 1 - 3
[C++ Korea] Effective Modern C++ Study, Item 1 - 3Chris Ohk
 
[C++ korea] Effective Modern C++ study item 19 use shared ptr for shared owne...
[C++ korea] Effective Modern C++ study item 19 use shared ptr for shared owne...[C++ korea] Effective Modern C++ study item 19 use shared ptr for shared owne...
[C++ korea] Effective Modern C++ study item 19 use shared ptr for shared owne...Seok-joon Yun
 
자바8 스트림 API 소개
자바8 스트림 API 소개자바8 스트림 API 소개
자바8 스트림 API 소개beom kyun choi
 
[C++ Korea] Effective Modern C++ Study item 24-26
[C++ Korea] Effective Modern C++ Study item 24-26[C++ Korea] Effective Modern C++ Study item 24-26
[C++ Korea] Effective Modern C++ Study item 24-26Seok-joon Yun
 
2 1. variables & data types
2 1. variables & data types2 1. variables & data types
2 1. variables & data types웅식 전
 
[C++ korea] effective modern c++ study item 17 19 신촌 study
[C++ korea] effective modern c++ study item 17 19 신촌 study[C++ korea] effective modern c++ study item 17 19 신촌 study
[C++ korea] effective modern c++ study item 17 19 신촌 studySeok-joon Yun
 

What's hot (20)

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

Similar to Finding Functional Programming

NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기Jaeseung Ha
 
개발자를 위한 공감세미나 tensor-flow
개발자를 위한 공감세미나 tensor-flow개발자를 위한 공감세미나 tensor-flow
개발자를 위한 공감세미나 tensor-flow양 한빛
 
Domain Specific Languages With Groovy
Domain Specific Languages With GroovyDomain Specific Languages With Groovy
Domain Specific Languages With GroovyTommy C. Kang
 
GopherCon Korea 2015 - Python 개발자를 위한 Go (이경찬)
GopherCon Korea 2015 - Python 개발자를 위한 Go (이경찬)GopherCon Korea 2015 - Python 개발자를 위한 Go (이경찬)
GopherCon Korea 2015 - Python 개발자를 위한 Go (이경찬)Kyoungchan Lee
 
DEVIEW-FULL-감독판.pptx
DEVIEW-FULL-감독판.pptxDEVIEW-FULL-감독판.pptx
DEVIEW-FULL-감독판.pptxhanbeom Park
 
Python programming for Bioinformatics
Python programming for BioinformaticsPython programming for Bioinformatics
Python programming for BioinformaticsHyungyong Kim
 
자바스크립트 함수
자바스크립트 함수자바스크립트 함수
자바스크립트 함수유진 변
 
introduce of Hadoop map reduce
introduce of Hadoop map reduceintroduce of Hadoop map reduce
introduce of Hadoop map reduceDaeyong Shin
 
스위프트 성능 이해하기
스위프트 성능 이해하기스위프트 성능 이해하기
스위프트 성능 이해하기Yongha Yoo
 
파이썬+함수이해하기 20160229
파이썬+함수이해하기 20160229파이썬+함수이해하기 20160229
파이썬+함수이해하기 20160229Yong Joon Moon
 
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)Sang Don Kim
 
함수형 프로그래밍
함수형 프로그래밍함수형 프로그래밍
함수형 프로그래밍QooJuice
 
파이썬 언어 기초
파이썬 언어 기초파이썬 언어 기초
파이썬 언어 기초beom kyun choi
 
함수형 사고 - Functional thinking
함수형 사고 - Functional thinking함수형 사고 - Functional thinking
함수형 사고 - Functional thinking재문 심
 
영상 데이터의 처리와 정보의 추출
영상 데이터의 처리와 정보의 추출영상 데이터의 처리와 정보의 추출
영상 데이터의 처리와 정보의 추출동윤 이
 
Hacosa js study 4주차
Hacosa js study 4주차Hacosa js study 4주차
Hacosa js study 4주차Seong Bong Ji
 
[170327 1주차]C언어 A반
[170327 1주차]C언어 A반[170327 1주차]C언어 A반
[170327 1주차]C언어 A반arundine
 

Similar to Finding Functional Programming (20)

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

More from NAVER Engineering

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

More from NAVER Engineering (20)

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

Recently uploaded

A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)Tae Young Lee
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Wonjun Hwang
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Wonjun Hwang
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionKim Daeun
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Kim Daeun
 

Recently uploaded (6)

A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
 

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