Functional Programming Principles in Scala - Coursera 강의 ppt 번역

2015. 12. 22. 11:00Programming/Scala

Programming Paradigms


Paradigm : 과학적으로 paradigm은 구별된 개념 또는 몇몇의 과학적 규율 내에서의 생각의 패턴등을 말한다.

주요 programming paradigms은 


- imperative programming

- functional programming

- logic programming


을 들 수가 있으며, 이와는 독립적으로


- object-oriented programming


을 들 수가 있다.


Review: Imperative programming


- 변수를 수정할 수가 있다.

- 값을 대입한다.

- if-then-else나 loops, break, continue, return 등과 같은 제어 로직을 사용한다.


imperative program의 대표적인 예로 Von Neumann computer의 순차 명령어 프로그래밍을 들 수가 있다.


Imperative Programs and Computers


아래의 항목들은 Imperative program과 computer 상호간에 상당히 유사하다고 할 수 있다.


- 변수 === 메모리 셀

- 변수의 포인트 값 참조 === 명령어 로드

- 변수 대입 === 명령어 저장

- 제어 로직 === jumps


Scaling Up


결국에는 순수한 imperative programming은 폰노이만 병목 현상에 의해 제한될 것이다.


- 단어 별로 데이터를 구조화 하는 경향


우리는 collections, polynomials, geometric shapes, strings, documents 등과 같은 고레벨의 추상화를 정의 하기 위해 다른 기술이 필요하다.


What is a Theory?


- 하나 또는 그 이상의 데이터 타입들

- 이러한 타입들의 operation

- 값과 operation 사이의 관계를 설명하는 법칙


Theory는 위의 요소들로 구성되어 있으며, 일반적으로 구조의 변경을 설명하지는 않는다.


Theories without Mutation


두 개의 다항식의 합을 정의하는 다항식 이론을 예로 들어보자.


- (a*x + b) + (c*x + d) = (a+c)*x + (b+d)


그러나 다항식을 동일하게 유지하는 반면에 계수를 변경하기 위한 operator를 정의하지는 않는다.


또 다른 예로 string의 ++ 연산자를 예로 들어보자


- (a ++ b) ++ c = a ++ (b ++ c)


이것도 마찬가지로 순서를 동일하게 유지하지만 순서 변경을 위한 operator를 정의하지는 않는다.

정의하지 않았음에도 우리는 위의 두 식이 동일함을 알 수 있으며, 이러한 점은 function program의 장점이라 할 수 있다.


Consequences for Programming


- operator의 이론을 정의하는데 집중하자.

- 상태 변화는 최소화 하자

- operator들을 단순한 함수들처럼 다루자.


Functional Programming


- functional programming은 변경가능한 변수, 대입문, loops와 기타 그밖의 imperative control structure가 없는 프로그래밍을 말한다.

- 함수에 포커스를 맞추어서 보다 우아한 프로그램을 생산할 수가 있다.

- 함수는 생산되어지고, 사용되어지고, 구성되어지는 값이 될 수가 있다. 또한 functional language에서의 함수는 first-class 이다. 왜냐하면 함수는 어디서든지 정의될 수가 있다. 심지어 다른 함수의 안에서도.. 또한 값처럼 파라미터로 사용될 수가 있고, 결과로 리턴될 수도 있다. 마지막으로 값과 마찬가지로 함수들간의 결합을 위한 operator가 존재한다.

- 이 모든 것들의 functional language에서는 쉽게 이루어진다.


Why Functional Programming?


Functional Programming은 멀티고어와 cloud 컴퓨팅이 점점 증가하면서 매력적인 방법 중의 하나로 점점 인기를 끌고 있다. 보다 많은 정보를 찾기를 원한다면, 2011 Oscon Java keynote를 참조하기 바란다.