SlideShare a Scribd company logo
함수형 프로그래밍
년 월 일 민창원
람다 대수 튜링 머신
• 현대 프로그래밍 언어의 주요 기반이 된 두가지 이론
• 두 개념의 큰 차이는 상태를 어떻게 다루는가
• 람다 대수
• 수학 문제를 풀 수 있는 단순한 기호 체계
• 년
• 처치의 명제 결정 가능한 모든 계산 가능한 함수가 재귀적
• 추후에 람다대수를 이용해 프로그래밍 언어를 고안
• 년 가 람다대수를 프로그래밍 언어 형태로 구현
•
• 함수형 언어로 발전
• 튜링 머신
• 에 따라서 입력값을 받아들여서 상태를 변경한다
• 년
• 폰노이만 구조 하드웨어 명령형 언어 절차적 언어 객체지향 언어 로 발전
• 데이터 의존 관계 심화 프로그래밍 언어도 같은 방식으로 발전
• 처치 튜링 명제
• 람다대수와 튜링머신은 등가
• 튜링머신으로 할 수 있는 것 람다대수로 할 수 있는 것
• 어떤 언어를 사용하더라도 같은 로직을 코딩할 수 있다
함수형 문제 해결 방식
1. 복잡한 문제를 동작을 중심으로 분석한다
2. 문제를 작은 부분으로 나눈다
3. 각 부분을 해결한다 해결한 것을 서로 조합해서 전체에 대한
해법을 만든다
4. 합성성 마이크로 서비스 아키텍처
객체 지향 패러다임 함수형 패러다임
의 참조
• 객체 지향 패러다임
• 사물 단위로 현상을 분해 해서 문제를 해결
• 데이터 위주로 추상화한다
• 분해를 위해 설계가 필요
• 상태가 변하는 부분을 캡슐화해서 제어
• 클래스를 재사용
• 함수형 패러다임
• 모듈형 함수를 조합 해서 문제를 해결
• 동작 위주로 추상화한다
• 인간의 사고를 반영
• 설계의 최소화
• 고차함수로 추상화
• 명료함
• 상태가 변하는 부분을 최소화 또는 제거
• 병렬 처리 동시성 문제를 해결
• 코드를 재사용
• 문제를 분류해서 해결
•
• 변경 가능
•
•
•
•
•
•
• 변경 불가능
•
•
문제 해결의
• 부분 집합
•
• 한 결과를 돌려준다
함수형 프로그래밍이 주목받는 이유
• 튜링머신은 인간이 아닌 하드웨어를 위한 문제해결법이다
• 소프트웨어를 개발할 때 왜 하드웨어적 사고에 맞추어야하는가
• 여기서 말하는 인간 사고는 감성적 사고나 판단이 아니고 알고리즘에
따르는 논리적인 사고 방식
• 알고리즘은 함수이다
• 인간의 사고 방식에 따른 함수형 프로그래밍
• 이 세상은 함수의 조합으로 표현할 수 있다
알고리즘
함수형 프로그래밍이 주목받는 이유
하느냐
•무어의 법칙 한계 멀티코어
•어플리케이션이 동작하는 동안 놀고있는 가 없어야 한다
•비동기 멀티 쓰레딩 동시성
•동시성 코드를 작성하는건 어렵다
•락 세마포어 비동기 프로그래밍에서 동기화를 해야하는
모순적인 상황
•공유 데이터가 이면 쓰기 락이 필수이다
•함수형 프로그래밍은
함수형 프로그래밍이 주목받는 이유
• 코드의 간결함
• 언어 런타임에 제어권 상태 관리를 양도한다
• 고수준 추상화 개념
코드의 간결함
함수형 언어
• 함수형 언어
•
•
•
•
•
• 함수형 언어의 개념이 도입된 언어
•
• 에서 파생된 의 함수형 언어 특징 반영
• 에서 파생된 의 프로토타입형 객체 지향 언어 특징 반영
• 함수형 프로그래밍을 위해서 사용 필요
•
• 여전히 함수형 프로그래밍을 하기에는 부족하다
• 등 함수형 프로그래밍 지원 라이브러리 필요
• 부분 강화
모든 언어에는 함수가 있다
함수형 언어의 함수는 뭐가 다른가
입력은
출력은 를 유발 큰 복잡성
함수의 를 보면 그 함수가 무슨 일을 하는지
짐작할 수 있어야 하는데
함수의 입력과 출력 종류는 두 개로 분류할 수 있다
모든 언어에는 함수가 있다
함수형 언어의 함수는 뭐가 다른가
순수 함수 참조 투명한 함수 불변 함수
모든 입력이 입력으로 선언되고 숨겨진 것이 없어야 한다 마찬가지로 모든 출력이 출력으로 선언된 함수를 순수
하다고 부른다
•
•컴퓨터 프로그래밍 언어 디자인에서 특정 언어의
은 일반적으로 다른 개체들이 이용 가능한 연산을 모두
지원하는 개체를 가리킨다
•연산 종류
• 함수에 매개변수로 넘기기 함수 반환 값 변수 할당 변수 수정
의 조건
•변수에 담을 수 있다
•인자로 전달할 수 있다
•반환값으로 전달할 수 있다
•함수 자체가 값 리터럴로 정의할 수 있다
•함수를 인자로 전달할 수 있다
•함수를 반환 값으로 전달할 수 있다
•함수를 변수의 값으로 할당할 수 있다
•위 조건은 순수 함수 일 때만 가능하다
• 는 객체지향 을 지향 상태 지향 하다보니 함수는
함수로 전락 함수를 인자로 사용할 수 없게 되어서
많은 가 필요
• 은 람다를 통해서 을 지원
의 장점
고차함수 구현 가능
• 고차 함수는 다른 함수를 생산 소비하는 함수를 말한다
• 특정 함수의 작업 내용이나 결과를 차 차로 고도화할 수 있다
• 수학에서의 차 차 차 함수와 같은 개념
• 이 세상은 함수의 조합으로 표현할 수 있다
• 인수 분해
• 사전적 의미 폐쇄
• 어원 문맥을 포괄함
• 코드와 문맥이 하나의 구조로 캡슐화 자료구조같은
• 인스턴스가 생성될 때 내에 있던 참조되는 외부 변수가 참조로 캡슐화되어 유지된다
• 은 이다
• 이 참조하는 변수의 는 살아있다
• 부수 효과 가 일 때 는 이다
•
제거
위 예제 수정
•필요할 때 실행한다
마지막 를 구할 때 실행
결과값이
필요없는 함수의 실행은
와 순서를
바꾸어도 동일 연산 성능
향상
빌더 패턴도 사용
함수형 프로그래밍에서도 사용
함수 체인
소유하는 객체가 지원하는 만 사용 가능
각 함수간 흐름은 새로 생성되어서 흐름
의존 관계가 없음
함수
-
호출
•합성 함수
•
• 함수를 추상화할 수 있다
• 는 가 없으며 대신 를 사용한다
• 로대시
• 항수 함수의 인수 개수 함수의
•함수의 인수가 많을 수록 복잡하다
•함수의 인수를 줄이자 그래야지 더 유연하게 활용 가능하다
• 이 다른 유한 원소를 지닌 정렬된 리스트 자료구조
•불변 객체
• 의 와 비슷하지만 불변 객체를 언어레벨에서
지원한다는 차이가 있다
•
• 수학자 논리학자 이름
• 다항함수가 인수를 모두 받을 때까지 실행을 보류 지연시켜 단계별로
나뉜 단항 함수의 순차열로 전환하는 기법
•
• 과 차이는 주어진 인수로 평가된 함수를 반환
•
•함수 인자 범위를 제한할 때 사용
입력한 인수의 값이 부분 함수가 처리할 수 없으면 예외를 발생
발생
함수자
• 범주론
• 대상 수학적 구조
• 사상 대상을 보존하는 함수의 개념을 추상화
• 내의 모든 의
• 와 으로 이루어진다
• 함수형 언어에서는 라고 한다 타입과 특정 연산을 묶어서 표현해주기 위한 수단
•
• 간의
• 함수를 받아서 를 로 변형시키는 함수
에서 꺼낸다
함수 적용한다
를 로 감싸서 로 만든다
• 내부 같은 를 의미
•같은 로 사상하는
•정의역과 공역이 같은
•적용 예
•
•
•
• 적용 예
•
• 둘중 하나의 값을 가질 수 있다 익셥션 대신에
•
•
•
•
•
• 처리에 대한 유연성
•
•
•
• 는 비동기 작업의 상태 결과만 가진다
• 는 비동기 작업 결과에 따른 콜백 처리
캡슐화와 순차적 비동기 작업 파이프라인 처리가 가능하다
자연 변환
• 중첩된 를 하나로 편다
• 적용 예
•
자연 변환
함수 합성
• 스트림 데이터 처리를 위한 추상화 제공
• 무한 스트림
•
•
•함수형 프로그래밍의 불변 함수의 장점
•같은 매개변수에 대해서 항상 같은 값을 리턴하는 함수의 리턴값
캐쉬
•불변 함수이기 때문에 가능하다
•외부정보에 절대로 의존하지 않는다
재귀
• 는 함수형 개념을 객체 지향 틀 안에서 도입했다
• 는 가 개만
있는 이다
• 은 이동 가능한 코드를 운송하는 메커니즘으로 사용 됨
• 은 이동 가능한 코드로 람다 을 넣었다
• 의 익명 클래스 인스턴스를 람다 으로 대체
•함수형 프로그래밍의 불완전한 접목 한계
예제
익명 내부 클래스
예제
함수형 인터페이스
함수형 인터페이스
•
• 매개변수가 없고 리턴값도 없다
•
• 매개변수가 있고 리턴값은 없다
•
• 매개변수가 없고 리턴값은 있다
•
• 매개변수가 있고 리턴값이 있다
•
• 매개변수가 있고 리턴 타입은

More Related Content

What's hot

About Functional Programming Paradigms
About Functional Programming Paradigms About Functional Programming Paradigms
About Functional Programming Paradigms
Junho Yeo
 
읽기 좋은 코드가 좋은코드다
읽기 좋은 코드가 좋은코드다읽기 좋은 코드가 좋은코드다
읽기 좋은 코드가 좋은코드다
wonmin lee
 
클린 코드 part2
클린 코드 part2클린 코드 part2
클린 코드 part2
Minseok Jang
 
Oop design principle SOLID
Oop design principle SOLIDOop design principle SOLID
Oop design principle SOLID
Ryan Park
 
Programming skills 1부
Programming skills 1부Programming skills 1부
Programming skills 1부
JiHyung Lee
 
Why Functional Programming Matters
Why Functional Programming MattersWhy Functional Programming Matters
Why Functional Programming Matters
Lee WonJae
 
Architecture patterns with python (1)
Architecture patterns with python (1)Architecture patterns with python (1)
Architecture patterns with python (1)
동환 김
 
간단하게 알아보는 좋은 코드 서영훈
간단하게 알아보는 좋은 코드   서영훈간단하게 알아보는 좋은 코드   서영훈
간단하게 알아보는 좋은 코드 서영훈
Seo YoungHoon
 
객체지향프로그래밍의 소개
객체지향프로그래밍의 소개객체지향프로그래밍의 소개
객체지향프로그래밍의 소개
Byeung-Ho Han
 
OOP 설계 원칙 S.O.L.I.D.
OOP 설계 원칙 S.O.L.I.D.OOP 설계 원칙 S.O.L.I.D.
OOP 설계 원칙 S.O.L.I.D.Ryan Park
 
Call back 발표자료
Call back 발표자료Call back 발표자료
Call back 발표자료
JangHee Lee
 
Effective c++ chapter 7,8
Effective c++ chapter 7,8Effective c++ chapter 7,8
Effective c++ chapter 7,8문익 장
 
네이버 NLP Challenge 후기
네이버 NLP Challenge 후기네이버 NLP Challenge 후기
네이버 NLP Challenge 후기
Jangwon Park
 
Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬Dong Chan Shin
 
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)MinGeun Park
 
Character-Aware Neural Language Models
Character-Aware Neural Language ModelsCharacter-Aware Neural Language Models
Character-Aware Neural Language Models
Hoon Heo
 

What's hot (16)

About Functional Programming Paradigms
About Functional Programming Paradigms About Functional Programming Paradigms
About Functional Programming Paradigms
 
읽기 좋은 코드가 좋은코드다
읽기 좋은 코드가 좋은코드다읽기 좋은 코드가 좋은코드다
읽기 좋은 코드가 좋은코드다
 
클린 코드 part2
클린 코드 part2클린 코드 part2
클린 코드 part2
 
Oop design principle SOLID
Oop design principle SOLIDOop design principle SOLID
Oop design principle SOLID
 
Programming skills 1부
Programming skills 1부Programming skills 1부
Programming skills 1부
 
Why Functional Programming Matters
Why Functional Programming MattersWhy Functional Programming Matters
Why Functional Programming Matters
 
Architecture patterns with python (1)
Architecture patterns with python (1)Architecture patterns with python (1)
Architecture patterns with python (1)
 
간단하게 알아보는 좋은 코드 서영훈
간단하게 알아보는 좋은 코드   서영훈간단하게 알아보는 좋은 코드   서영훈
간단하게 알아보는 좋은 코드 서영훈
 
객체지향프로그래밍의 소개
객체지향프로그래밍의 소개객체지향프로그래밍의 소개
객체지향프로그래밍의 소개
 
OOP 설계 원칙 S.O.L.I.D.
OOP 설계 원칙 S.O.L.I.D.OOP 설계 원칙 S.O.L.I.D.
OOP 설계 원칙 S.O.L.I.D.
 
Call back 발표자료
Call back 발표자료Call back 발표자료
Call back 발표자료
 
Effective c++ chapter 7,8
Effective c++ chapter 7,8Effective c++ chapter 7,8
Effective c++ chapter 7,8
 
네이버 NLP Challenge 후기
네이버 NLP Challenge 후기네이버 NLP Challenge 후기
네이버 NLP Challenge 후기
 
Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬
 
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)
 
Character-Aware Neural Language Models
Character-Aware Neural Language ModelsCharacter-Aware Neural Language Models
Character-Aware Neural Language Models
 

Similar to 함수형 프로그래밍

Concurreny programming
Concurreny programmingConcurreny programming
Concurreny programming
Jaejin Yun
 
FP, lazy evaluation
FP, lazy evaluation FP, lazy evaluation
FP, lazy evaluation
성범 홍
 
Effective c++ 4
Effective c++ 4Effective c++ 4
Effective c++ 4현찬 양
 
Uml 세미나
Uml 세미나Uml 세미나
Uml 세미나
Daniel Shin
 
C++ Advanced 강의 5주차
C++ Advanced 강의 5주차C++ Advanced 강의 5주차
C++ Advanced 강의 5주차
HyunJoon Park
 
Chapter7~9 ppt
Chapter7~9 pptChapter7~9 ppt
Chapter7~9 ppt
Injae Lee
 
C Language II
C Language IIC Language II
C Language IISuho Kwon
 
함수형 프로그래밍
함수형 프로그래밍함수형 프로그래밍
함수형 프로그래밍
QooJuice
 
Microsoft pp lpdf
Microsoft pp lpdfMicrosoft pp lpdf
Microsoft pp lpdf
HYUNWOO KIM
 
[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java
유리 하
 
3팀_객체지향 프로그래밍.pptx
3팀_객체지향 프로그래밍.pptx3팀_객체지향 프로그래밍.pptx
3팀_객체지향 프로그래밍.pptx
ssuser642b19
 
자바스크립트 함수
자바스크립트 함수자바스크립트 함수
자바스크립트 함수유진 변
 
Effective c++ 3
Effective c++ 3Effective c++ 3
Effective c++ 3현찬 양
 
Chapter5 ~ 6
Chapter5 ~ 6Chapter5 ~ 6
Chapter5 ~ 6Injae Lee
 
4-1. javascript
4-1. javascript4-1. javascript
4-1. javascript
JinKyoungHeo
 
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
Min-soo Park
 
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
Chris Ohk
 
Monad programming
Monad programmingMonad programming
Monad programming
AlgorigoInc
 

Similar to 함수형 프로그래밍 (20)

Concurreny programming
Concurreny programmingConcurreny programming
Concurreny programming
 
FP, lazy evaluation
FP, lazy evaluation FP, lazy evaluation
FP, lazy evaluation
 
Effective c++ 4
Effective c++ 4Effective c++ 4
Effective c++ 4
 
Uml 세미나
Uml 세미나Uml 세미나
Uml 세미나
 
Uml intro 0
Uml intro 0Uml intro 0
Uml intro 0
 
C++ Advanced 강의 5주차
C++ Advanced 강의 5주차C++ Advanced 강의 5주차
C++ Advanced 강의 5주차
 
Chapter7~9 ppt
Chapter7~9 pptChapter7~9 ppt
Chapter7~9 ppt
 
C Language II
C Language IIC Language II
C Language II
 
함수형 프로그래밍
함수형 프로그래밍함수형 프로그래밍
함수형 프로그래밍
 
7 8 1
7 8 17 8 1
7 8 1
 
Microsoft pp lpdf
Microsoft pp lpdfMicrosoft pp lpdf
Microsoft pp lpdf
 
[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java
 
3팀_객체지향 프로그래밍.pptx
3팀_객체지향 프로그래밍.pptx3팀_객체지향 프로그래밍.pptx
3팀_객체지향 프로그래밍.pptx
 
자바스크립트 함수
자바스크립트 함수자바스크립트 함수
자바스크립트 함수
 
Effective c++ 3
Effective c++ 3Effective c++ 3
Effective c++ 3
 
Chapter5 ~ 6
Chapter5 ~ 6Chapter5 ~ 6
Chapter5 ~ 6
 
4-1. javascript
4-1. javascript4-1. javascript
4-1. javascript
 
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
 
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
 
Monad programming
Monad programmingMonad programming
Monad programming
 

함수형 프로그래밍

  • 2. 람다 대수 튜링 머신 • 현대 프로그래밍 언어의 주요 기반이 된 두가지 이론 • 두 개념의 큰 차이는 상태를 어떻게 다루는가 • 람다 대수 • 수학 문제를 풀 수 있는 단순한 기호 체계 • 년 • 처치의 명제 결정 가능한 모든 계산 가능한 함수가 재귀적 • 추후에 람다대수를 이용해 프로그래밍 언어를 고안 • 년 가 람다대수를 프로그래밍 언어 형태로 구현 • • 함수형 언어로 발전 • 튜링 머신 • 에 따라서 입력값을 받아들여서 상태를 변경한다 • 년 • 폰노이만 구조 하드웨어 명령형 언어 절차적 언어 객체지향 언어 로 발전 • 데이터 의존 관계 심화 프로그래밍 언어도 같은 방식으로 발전 • 처치 튜링 명제 • 람다대수와 튜링머신은 등가 • 튜링머신으로 할 수 있는 것 람다대수로 할 수 있는 것 • 어떤 언어를 사용하더라도 같은 로직을 코딩할 수 있다
  • 3. 함수형 문제 해결 방식 1. 복잡한 문제를 동작을 중심으로 분석한다 2. 문제를 작은 부분으로 나눈다 3. 각 부분을 해결한다 해결한 것을 서로 조합해서 전체에 대한 해법을 만든다 4. 합성성 마이크로 서비스 아키텍처
  • 4. 객체 지향 패러다임 함수형 패러다임 의 참조 • 객체 지향 패러다임 • 사물 단위로 현상을 분해 해서 문제를 해결 • 데이터 위주로 추상화한다 • 분해를 위해 설계가 필요 • 상태가 변하는 부분을 캡슐화해서 제어 • 클래스를 재사용 • 함수형 패러다임 • 모듈형 함수를 조합 해서 문제를 해결 • 동작 위주로 추상화한다 • 인간의 사고를 반영 • 설계의 최소화 • 고차함수로 추상화 • 명료함 • 상태가 변하는 부분을 최소화 또는 제거 • 병렬 처리 동시성 문제를 해결 • 코드를 재사용 • 문제를 분류해서 해결
  • 6. 문제 해결의 • 부분 집합 • • 한 결과를 돌려준다
  • 7. 함수형 프로그래밍이 주목받는 이유 • 튜링머신은 인간이 아닌 하드웨어를 위한 문제해결법이다 • 소프트웨어를 개발할 때 왜 하드웨어적 사고에 맞추어야하는가 • 여기서 말하는 인간 사고는 감성적 사고나 판단이 아니고 알고리즘에 따르는 논리적인 사고 방식 • 알고리즘은 함수이다 • 인간의 사고 방식에 따른 함수형 프로그래밍 • 이 세상은 함수의 조합으로 표현할 수 있다 알고리즘
  • 8. 함수형 프로그래밍이 주목받는 이유 하느냐 •무어의 법칙 한계 멀티코어 •어플리케이션이 동작하는 동안 놀고있는 가 없어야 한다 •비동기 멀티 쓰레딩 동시성 •동시성 코드를 작성하는건 어렵다 •락 세마포어 비동기 프로그래밍에서 동기화를 해야하는 모순적인 상황 •공유 데이터가 이면 쓰기 락이 필수이다 •함수형 프로그래밍은
  • 9. 함수형 프로그래밍이 주목받는 이유 • 코드의 간결함 • 언어 런타임에 제어권 상태 관리를 양도한다 • 고수준 추상화 개념
  • 11. 함수형 언어 • 함수형 언어 • • • • • • 함수형 언어의 개념이 도입된 언어 • • 에서 파생된 의 함수형 언어 특징 반영 • 에서 파생된 의 프로토타입형 객체 지향 언어 특징 반영 • 함수형 프로그래밍을 위해서 사용 필요 • • 여전히 함수형 프로그래밍을 하기에는 부족하다 • 등 함수형 프로그래밍 지원 라이브러리 필요 • 부분 강화
  • 12. 모든 언어에는 함수가 있다 함수형 언어의 함수는 뭐가 다른가 입력은 출력은 를 유발 큰 복잡성 함수의 를 보면 그 함수가 무슨 일을 하는지 짐작할 수 있어야 하는데 함수의 입력과 출력 종류는 두 개로 분류할 수 있다
  • 13. 모든 언어에는 함수가 있다 함수형 언어의 함수는 뭐가 다른가 순수 함수 참조 투명한 함수 불변 함수 모든 입력이 입력으로 선언되고 숨겨진 것이 없어야 한다 마찬가지로 모든 출력이 출력으로 선언된 함수를 순수 하다고 부른다
  • 14. • •컴퓨터 프로그래밍 언어 디자인에서 특정 언어의 은 일반적으로 다른 개체들이 이용 가능한 연산을 모두 지원하는 개체를 가리킨다 •연산 종류 • 함수에 매개변수로 넘기기 함수 반환 값 변수 할당 변수 수정
  • 15. 의 조건 •변수에 담을 수 있다 •인자로 전달할 수 있다 •반환값으로 전달할 수 있다
  • 16. •함수 자체가 값 리터럴로 정의할 수 있다 •함수를 인자로 전달할 수 있다 •함수를 반환 값으로 전달할 수 있다 •함수를 변수의 값으로 할당할 수 있다 •위 조건은 순수 함수 일 때만 가능하다 • 는 객체지향 을 지향 상태 지향 하다보니 함수는 함수로 전락 함수를 인자로 사용할 수 없게 되어서 많은 가 필요 • 은 람다를 통해서 을 지원
  • 17. 의 장점 고차함수 구현 가능 • 고차 함수는 다른 함수를 생산 소비하는 함수를 말한다 • 특정 함수의 작업 내용이나 결과를 차 차로 고도화할 수 있다 • 수학에서의 차 차 차 함수와 같은 개념 • 이 세상은 함수의 조합으로 표현할 수 있다 • 인수 분해
  • 18. • 사전적 의미 폐쇄 • 어원 문맥을 포괄함 • 코드와 문맥이 하나의 구조로 캡슐화 자료구조같은 • 인스턴스가 생성될 때 내에 있던 참조되는 외부 변수가 참조로 캡슐화되어 유지된다 • 은 이다 • 이 참조하는 변수의 는 살아있다 • 부수 효과 가 일 때 는 이다 • 제거 위 예제 수정
  • 19. •필요할 때 실행한다 마지막 를 구할 때 실행 결과값이 필요없는 함수의 실행은 와 순서를 바꾸어도 동일 연산 성능 향상
  • 20. 빌더 패턴도 사용 함수형 프로그래밍에서도 사용 함수 체인 소유하는 객체가 지원하는 만 사용 가능 각 함수간 흐름은 새로 생성되어서 흐름 의존 관계가 없음
  • 23. • 함수를 추상화할 수 있다 • 는 가 없으며 대신 를 사용한다 • 로대시
  • 24. • 항수 함수의 인수 개수 함수의 •함수의 인수가 많을 수록 복잡하다 •함수의 인수를 줄이자 그래야지 더 유연하게 활용 가능하다 • 이 다른 유한 원소를 지닌 정렬된 리스트 자료구조 •불변 객체 • 의 와 비슷하지만 불변 객체를 언어레벨에서 지원한다는 차이가 있다 •
  • 25. • 수학자 논리학자 이름 • 다항함수가 인수를 모두 받을 때까지 실행을 보류 지연시켜 단계별로 나뉜 단항 함수의 순차열로 전환하는 기법 •
  • 26. • 과 차이는 주어진 인수로 평가된 함수를 반환 •
  • 27. •함수 인자 범위를 제한할 때 사용 입력한 인수의 값이 부분 함수가 처리할 수 없으면 예외를 발생 발생
  • 28. 함수자 • 범주론 • 대상 수학적 구조 • 사상 대상을 보존하는 함수의 개념을 추상화 • 내의 모든 의 • 와 으로 이루어진다 • 함수형 언어에서는 라고 한다 타입과 특정 연산을 묶어서 표현해주기 위한 수단 • • 간의 • 함수를 받아서 를 로 변형시키는 함수 에서 꺼낸다 함수 적용한다 를 로 감싸서 로 만든다
  • 29. • 내부 같은 를 의미 •같은 로 사상하는 •정의역과 공역이 같은 •적용 예 • •
  • 30. • • 적용 예 • • 둘중 하나의 값을 가질 수 있다 익셥션 대신에 • • • • • • 처리에 대한 유연성 • • •
  • 31.
  • 32. • 는 비동기 작업의 상태 결과만 가진다 • 는 비동기 작업 결과에 따른 콜백 처리 캡슐화와 순차적 비동기 작업 파이프라인 처리가 가능하다
  • 33. 자연 변환 • 중첩된 를 하나로 편다 • 적용 예 •
  • 35. • 스트림 데이터 처리를 위한 추상화 제공 • 무한 스트림 • •
  • 36. •함수형 프로그래밍의 불변 함수의 장점 •같은 매개변수에 대해서 항상 같은 값을 리턴하는 함수의 리턴값 캐쉬 •불변 함수이기 때문에 가능하다 •외부정보에 절대로 의존하지 않는다
  • 37.
  • 39. • 는 함수형 개념을 객체 지향 틀 안에서 도입했다 • 는 가 개만 있는 이다 • 은 이동 가능한 코드를 운송하는 메커니즘으로 사용 됨 • 은 이동 가능한 코드로 람다 을 넣었다 • 의 익명 클래스 인스턴스를 람다 으로 대체 •함수형 프로그래밍의 불완전한 접목 한계
  • 42. 함수형 인터페이스 • • 매개변수가 없고 리턴값도 없다 • • 매개변수가 있고 리턴값은 없다 • • 매개변수가 없고 리턴값은 있다 • • 매개변수가 있고 리턴값이 있다 • • 매개변수가 있고 리턴 타입은