SlideShare a Scribd company logo
함수형 사고
- 전진하라 -
http://pigbrain.github.io
이현동
문제에 적합한 패러다임을 사용하는 법을 배우는 것이
더 좋은 개발자로 진화하는 길 중의 하나이다
디자인 패턴은 프로그램 개발에서 자주 나타나는 과제를 해결
하기 위한 방법 중 하나이다.
과거의 소프트웨어 개발 과정에서 발견된 설계의 노하우를 축적하여 이름을 붙여, 이후
에 재이용하기 좋은 형태로 특정의 규약을 묶어서 정리한 것이다.
함수형 프로그래밍에서 기존의 디자인 패턴은 다음 형태로 나타난다.
- 패턴이 언어에 흡수된다.
- 패턴 해법이 함수형 패러다임에도 존재하지만, 구체적인 구현
방식은 다르다.
- 해법이 다른 언어나 패러다임에 없는 기능으로 구현된다.
객체지향 언어는 서로의 메서드 호출을 통해 소통하는
객체들로 구성되어 있다.
객체지향 언어에서의 재사용
자주 사용되고 유용한 메서드들을 발견하면 재사용을
위하여 추출한다
객체지향 언어에서의 재사용
객체지향 언어에서의 재사용
아주 작은 단위의 재사용 !
특정 상황에서만 사용 할 수 있다
함수형 언어는 구조물들 간에 커플링을 만들기보다는
큰 단위의 재사용 메커니즘을 추출 한다
카테고리 이론에 근거하여 재사용 메커니즘을 구축함으
로 상황에 따라 달리 지고 이동 가능한 코드를 만들 수
있다
#contextualized #portable
함수형 언어에서의 재사용
카테고리 이론
수학의 여러 분야에서 공통적으로 발생하는 현상들을 추상화하여 정리하는 이론이다
각 분야를 정리해주는 언어는 제공해 줄 수 있어도
구체적인 문제를 해결하기 위해서는 다시 각 분야로 돌아가야 한다
http://www.aladin.co.kr/shop/wproduct.aspx?ItemId=76801071
객체지향 언어와 함수형 언어에서의 재사용
- 전략(strategy) 패턴-
In Java
In Scala
Java vs Scala
객체지향 언어와 함수형 언어에서의 재사용
- 팩토리(factory)와 커링(currying)-
디자인 패턴 측면에서 커링은 함수의 팩토리처럼 사용된다
함수형 언어에서는 커링이 언어나
런타임에 내장되어 있기 때문에
팩토리의 개념이 이미 포함되어 있다
구조형 재사용과 함수형 재사용
Effective Java
규칙 16 : 계승하는 대신 구성하라
- 메서드 호출과 달리 계승은 캡슐화 원칙을 위반한다
- 하위 클래스가 정상 동작하기 위해서는 상위 클래스의 구현에 의존할 수 밖에 없다
- 상위 클래스가 수정됨에 따라 하위 클래스 코드는 수정된 적이 없어도 망가질 수 있다
끝

More Related Content

Viewers also liked

Node.js 현재와 미래
Node.js 현재와 미래Node.js 현재와 미래
Node.js 현재와 미래
JeongHun Byeon
 
Exception Handler, Controller Advice Of Spring
Exception Handler, Controller Advice Of SpringException Handler, Controller Advice Of Spring
Exception Handler, Controller Advice Of Spring
Hyun Dong Lee
 
한글 언어 자원과 R: KoNLP 개선과 활용
한글 언어 자원과 R: KoNLP 개선과 활용한글 언어 자원과 R: KoNLP 개선과 활용
한글 언어 자원과 R: KoNLP 개선과 활용
r-kor
 
함수적 사고 2장
함수적 사고 2장함수적 사고 2장
함수적 사고 2장
HyeonSeok Choi
 
Actors in erlang
Actors in erlangActors in erlang
Actors in erlang
Hyun Dong Lee
 
The Curious Clojurist - Neal Ford (Thoughtworks)
The Curious Clojurist - Neal Ford (Thoughtworks)The Curious Clojurist - Neal Ford (Thoughtworks)
The Curious Clojurist - Neal Ford (Thoughtworks)
jaxLondonConference
 

Viewers also liked (6)

Node.js 현재와 미래
Node.js 현재와 미래Node.js 현재와 미래
Node.js 현재와 미래
 
Exception Handler, Controller Advice Of Spring
Exception Handler, Controller Advice Of SpringException Handler, Controller Advice Of Spring
Exception Handler, Controller Advice Of Spring
 
한글 언어 자원과 R: KoNLP 개선과 활용
한글 언어 자원과 R: KoNLP 개선과 활용한글 언어 자원과 R: KoNLP 개선과 활용
한글 언어 자원과 R: KoNLP 개선과 활용
 
함수적 사고 2장
함수적 사고 2장함수적 사고 2장
함수적 사고 2장
 
Actors in erlang
Actors in erlangActors in erlang
Actors in erlang
 
The Curious Clojurist - Neal Ford (Thoughtworks)
The Curious Clojurist - Neal Ford (Thoughtworks)The Curious Clojurist - Neal Ford (Thoughtworks)
The Curious Clojurist - Neal Ford (Thoughtworks)
 

Similar to 함수형 사고

Domain-Driven Design 훑어보기 Part 1
Domain-Driven Design 훑어보기 Part 1Domain-Driven Design 훑어보기 Part 1
Domain-Driven Design 훑어보기 Part 1
Sangwon Ko
 
SNU UX Lab 패턴랭귀지 (The origin of Pattern Language)
SNU UX Lab 패턴랭귀지 (The origin of Pattern Language)SNU UX Lab 패턴랭귀지 (The origin of Pattern Language)
SNU UX Lab 패턴랭귀지 (The origin of Pattern Language)
Hyun-Soo Ji
 
TTS System을 이용한 교육용 소프트웨어 개발
TTS System을 이용한 교육용 소프트웨어 개발TTS System을 이용한 교육용 소프트웨어 개발
TTS System을 이용한 교육용 소프트웨어 개발
Jongmyoung Kim
 
2장. 의사소통과 언어 사용
2장. 의사소통과 언어 사용2장. 의사소통과 언어 사용
2장. 의사소통과 언어 사용
kidoki
 
프로그래머의 길,멘토에게 묻다 2장
프로그래머의 길,멘토에게 묻다 2장프로그래머의 길,멘토에게 묻다 2장
프로그래머의 길,멘토에게 묻다 2장
hyun soomyung
 
디자인패턴
디자인패턴디자인패턴
디자인패턴
진화 손
 
​『함수형 반응형 프로그래밍』 맛보기
​『함수형 반응형 프로그래밍』 맛보기​『함수형 반응형 프로그래밍』 맛보기
​『함수형 반응형 프로그래밍』 맛보기
복연 이
 
Domain driven design_chapter2
Domain driven design_chapter2Domain driven design_chapter2
Domain driven design_chapter2Youngkwon Lee
 
프로토타이핑
프로토타이핑프로토타이핑
프로토타이핑정인 주
 
Design Pattern Introduction
Design Pattern IntroductionDesign Pattern Introduction
Design Pattern Introduction
Bill Kim
 
브랜디드어플리케이션 소개자료 1_2(100512)
브랜디드어플리케이션 소개자료 1_2(100512)브랜디드어플리케이션 소개자료 1_2(100512)
브랜디드어플리케이션 소개자료 1_2(100512)ideaguide
 
스마일게이트 서버개발캠프 - 5vengers
스마일게이트 서버개발캠프 - 5vengers 스마일게이트 서버개발캠프 - 5vengers
스마일게이트 서버개발캠프 - 5vengers
ServerDevCamp
 
격변하는 프로그래밍 언어, 이제는 Let it go
격변하는 프로그래밍 언어, 이제는 Let it go격변하는 프로그래밍 언어, 이제는 Let it go
격변하는 프로그래밍 언어, 이제는 Let it go
Chris Ohk
 
프로그래밍 언어의 기본 개념과 주요 프로그래밍 언어
프로그래밍 언어의 기본 개념과 주요 프로그래밍 언어프로그래밍 언어의 기본 개념과 주요 프로그래밍 언어
프로그래밍 언어의 기본 개념과 주요 프로그래밍 언어
Bizmerce Corp
 
31기 고지웅 "구글오픈소스"
31기 고지웅 "구글오픈소스"31기 고지웅 "구글오픈소스"
31기 고지웅 "구글오픈소스"
hyu_jaram
 
소프트웨어교육 운영지침(2015)_교육부
소프트웨어교육 운영지침(2015)_교육부소프트웨어교육 운영지침(2015)_교육부
소프트웨어교육 운영지침(2015)_교육부
sam Cyberspace
 
Toolkits for robust speech processing
Toolkits for robust speech processingToolkits for robust speech processing
Toolkits for robust speech processing
창기 문
 
프로그래머 일하면서 성장하기
프로그래머 일하면서 성장하기프로그래머 일하면서 성장하기
프로그래머 일하면서 성장하기
wlstjdpark
 

Similar to 함수형 사고 (19)

Domain-Driven Design 훑어보기 Part 1
Domain-Driven Design 훑어보기 Part 1Domain-Driven Design 훑어보기 Part 1
Domain-Driven Design 훑어보기 Part 1
 
SNU UX Lab 패턴랭귀지 (The origin of Pattern Language)
SNU UX Lab 패턴랭귀지 (The origin of Pattern Language)SNU UX Lab 패턴랭귀지 (The origin of Pattern Language)
SNU UX Lab 패턴랭귀지 (The origin of Pattern Language)
 
TTS System을 이용한 교육용 소프트웨어 개발
TTS System을 이용한 교육용 소프트웨어 개발TTS System을 이용한 교육용 소프트웨어 개발
TTS System을 이용한 교육용 소프트웨어 개발
 
2장. 의사소통과 언어 사용
2장. 의사소통과 언어 사용2장. 의사소통과 언어 사용
2장. 의사소통과 언어 사용
 
프로그래머의 길,멘토에게 묻다 2장
프로그래머의 길,멘토에게 묻다 2장프로그래머의 길,멘토에게 묻다 2장
프로그래머의 길,멘토에게 묻다 2장
 
디자인패턴
디자인패턴디자인패턴
디자인패턴
 
​『함수형 반응형 프로그래밍』 맛보기
​『함수형 반응형 프로그래밍』 맛보기​『함수형 반응형 프로그래밍』 맛보기
​『함수형 반응형 프로그래밍』 맛보기
 
Domain driven design_chapter2
Domain driven design_chapter2Domain driven design_chapter2
Domain driven design_chapter2
 
프로토타이핑
프로토타이핑프로토타이핑
프로토타이핑
 
Design Pattern Introduction
Design Pattern IntroductionDesign Pattern Introduction
Design Pattern Introduction
 
브랜디드어플리케이션 소개자료 1_2(100512)
브랜디드어플리케이션 소개자료 1_2(100512)브랜디드어플리케이션 소개자료 1_2(100512)
브랜디드어플리케이션 소개자료 1_2(100512)
 
스마일게이트 서버개발캠프 - 5vengers
스마일게이트 서버개발캠프 - 5vengers 스마일게이트 서버개발캠프 - 5vengers
스마일게이트 서버개발캠프 - 5vengers
 
격변하는 프로그래밍 언어, 이제는 Let it go
격변하는 프로그래밍 언어, 이제는 Let it go격변하는 프로그래밍 언어, 이제는 Let it go
격변하는 프로그래밍 언어, 이제는 Let it go
 
프로그래밍 언어의 기본 개념과 주요 프로그래밍 언어
프로그래밍 언어의 기본 개념과 주요 프로그래밍 언어프로그래밍 언어의 기본 개념과 주요 프로그래밍 언어
프로그래밍 언어의 기본 개념과 주요 프로그래밍 언어
 
31기 고지웅 "구글오픈소스"
31기 고지웅 "구글오픈소스"31기 고지웅 "구글오픈소스"
31기 고지웅 "구글오픈소스"
 
소프트웨어교육 운영지침(2015)_교육부
소프트웨어교육 운영지침(2015)_교육부소프트웨어교육 운영지침(2015)_교육부
소프트웨어교육 운영지침(2015)_교육부
 
읨Krkwic
읨Krkwic읨Krkwic
읨Krkwic
 
Toolkits for robust speech processing
Toolkits for robust speech processingToolkits for robust speech processing
Toolkits for robust speech processing
 
프로그래머 일하면서 성장하기
프로그래머 일하면서 성장하기프로그래머 일하면서 성장하기
프로그래머 일하면서 성장하기
 

함수형 사고

  • 1. 함수형 사고 - 전진하라 - http://pigbrain.github.io 이현동
  • 2. 문제에 적합한 패러다임을 사용하는 법을 배우는 것이 더 좋은 개발자로 진화하는 길 중의 하나이다
  • 3. 디자인 패턴은 프로그램 개발에서 자주 나타나는 과제를 해결 하기 위한 방법 중 하나이다. 과거의 소프트웨어 개발 과정에서 발견된 설계의 노하우를 축적하여 이름을 붙여, 이후 에 재이용하기 좋은 형태로 특정의 규약을 묶어서 정리한 것이다.
  • 4. 함수형 프로그래밍에서 기존의 디자인 패턴은 다음 형태로 나타난다. - 패턴이 언어에 흡수된다. - 패턴 해법이 함수형 패러다임에도 존재하지만, 구체적인 구현 방식은 다르다. - 해법이 다른 언어나 패러다임에 없는 기능으로 구현된다.
  • 5. 객체지향 언어는 서로의 메서드 호출을 통해 소통하는 객체들로 구성되어 있다. 객체지향 언어에서의 재사용
  • 6. 자주 사용되고 유용한 메서드들을 발견하면 재사용을 위하여 추출한다 객체지향 언어에서의 재사용
  • 7. 객체지향 언어에서의 재사용 아주 작은 단위의 재사용 ! 특정 상황에서만 사용 할 수 있다
  • 8. 함수형 언어는 구조물들 간에 커플링을 만들기보다는 큰 단위의 재사용 메커니즘을 추출 한다 카테고리 이론에 근거하여 재사용 메커니즘을 구축함으 로 상황에 따라 달리 지고 이동 가능한 코드를 만들 수 있다 #contextualized #portable 함수형 언어에서의 재사용
  • 9. 카테고리 이론 수학의 여러 분야에서 공통적으로 발생하는 현상들을 추상화하여 정리하는 이론이다 각 분야를 정리해주는 언어는 제공해 줄 수 있어도 구체적인 문제를 해결하기 위해서는 다시 각 분야로 돌아가야 한다 http://www.aladin.co.kr/shop/wproduct.aspx?ItemId=76801071
  • 10. 객체지향 언어와 함수형 언어에서의 재사용 - 전략(strategy) 패턴-
  • 14. 객체지향 언어와 함수형 언어에서의 재사용 - 팩토리(factory)와 커링(currying)-
  • 15. 디자인 패턴 측면에서 커링은 함수의 팩토리처럼 사용된다
  • 16. 함수형 언어에서는 커링이 언어나 런타임에 내장되어 있기 때문에 팩토리의 개념이 이미 포함되어 있다
  • 18. Effective Java 규칙 16 : 계승하는 대신 구성하라 - 메서드 호출과 달리 계승은 캡슐화 원칙을 위반한다 - 하위 클래스가 정상 동작하기 위해서는 상위 클래스의 구현에 의존할 수 밖에 없다 - 상위 클래스가 수정됨에 따라 하위 클래스 코드는 수정된 적이 없어도 망가질 수 있다
  • 19.

Editor's Notes

  1. 다양한 패러다임을 가지고 있고 어떻게 사용하는지에 따라 다양한 방법으로 문제를 해결 할 수 있지만 문제에 가장 적합한 패러다임으로 접근하여 해결하는 것이 더 좋은 개발자로 진화하는 길이다. 진화하려면 이런걸 배워야 한다.. 그렇지 않으면 진화하지 못한다..
  2. 디자인 패턴은 개발 과정에서 발견된 설계의 노하우를 모아 놓은 집합체이며 재사용하기 좋은 형태로 규칙들을 묶어서 정리한 것이다. 함수형이라는 것 자체가 가변적인 것을 최소화하고 가변적인 부분은 외부로부터 함수의 형태로 입력 받아 처리함으로써 재사용의 단위가 oop에 비하면 굉장히 작아서 함수형에서는 디자인 패턴이 필요가 없다 생각 할 수 있지만 oop와는 다른 형태로 디자인 패턴이 나타난다
  3. 함수형 언어가 OOP보다 더 높은 위치의 추상화를 하고 있기 때문에 하나의 패턴 자체가 언어에 흡수되어 있는 형태가 가능하다 1장부터 나온 패러다임 전환/ 런타임에 제어를 언어에게 양도하기가 나온 것 처럼 접근 방식이 다르니 패턴에 대한 구현과, 다른 언어나 패러다임에 없는 기능으로 구현되는 것은 당연한 것 같다
  4. 객체지향 언어에서는 재사용의 대상이 되는 곳에 메서드들의 호출 관계가 포함되어 있기 때문에 특정 상황에서만 적용이 가능하다
  5. 객체지향 언어에서는 재사용 범위에 메서드 호출관계도 포함이 되어 있었지만 함수형 언어에서는 함수 자체가 1계층이기 때문에 상황에 따른 코드를 끼워 넣고 호출 할 수 있는 구조로 재사용을 지향한다. 여기서 카테고리 이론이라는게 나오는데,,,
  6. 자바에서 전략 패턴을 만들려면,, 일단 인터페이스 하나가 필요하고,, 이 인터페이스를 구현한 구현체들이 필요하다
  7. 딱 봐도 자바코드에 비하여 엄청 짧아졌다. 무슨 차이가 있는건가..
  8. 함수형에서는 인터페이스? 물론 스칼라에 trait 라는 인터페이스와 비슷한 녀석이 있지만 그런 보일러플레이트 코드들은 필요가 없다 입력과 출력형태만 보장되면 개발자 마음대로 만들어도 된다. 자바 처럼 새로운 전략을 추가하기 위해 인터페이스를 상속하여 구현체를 만드는 등의 번거로운 작업은 하지 않아도 된다
  9. 팩토리의 본질은 주어진 조건에 따라 다른 함수들을 리턴하는 함수를 만드는 것이다. 팩토리와 커링 둘 다 뭘 넣으면 뭐가 나오니,, 디자인 패턴 관점에서 이 두 개는 동일하다