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