[개발 상식] 함수형 프로그래밍

2018. 8. 22. 23:56CS/개발 상식

반응형
[개발 상식] 함수형 프로그래밍

해당 시리즈는 Interview_Question_for_Beginner를 기반으로 추가 학습을 진행해 작성하였습니다.

목차

함수형 프로그래밍

위키백과

함수형 프로그래밍은 자료 처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임의 하나이다.
명령형 프로그래밍에서는 상태를 바꾸는 것을 강조하는 것과는 달리, 함수형 프로그래밍은 함수의 응용을 강조한다.

가장 큰 특징 2가지

1. Immutable data

한번 정해진 값은 바뀌지 않는다.

  • state의 내부 상태를 바꾸는 것이 아니라 새로운 state를 만든다.
  • 처리할 데이터가 불변이기 때문에 수학적 의미의 함수형태로 함수를 만들게 됨

<-> mutable : 객체의 값이 변경될 경우 변경된 값을 저장

2. First-class-citizen 로서의 ‘function’

함수(function)는 일급 객체(first class citizen)로 간주된다.

일급 객체

  • 함수를 변수나 데이터 구조안에 담을 수 있다
    • 함수를 파라미터로 전달하고 반환 값으로 사용 가능
  • 할당에 사용된 이름과 관계없이 고유한 구별이 가능하다.
  • 함수를 리터럴로 바로 정의할 수 있다.

Reactive programming(반응형 프로그래밍)

함수형 프로그래밍 언어의 도구들을 가지고 데이터 흐름을 composable하게 구현하는 것

  • 비동기 데이터 흐름에 기반을 둔 프로그래밍 패러다임
  • 기본적으로 모든 것을 스트림(stream)으로 봄
    • 스트림 : 값들의 집합, 제공되는 함수형 메소드를 통해 데이터를 immutable하게 관리할 수
  • 선언형 프로그래밍(declarative programming)이라고도 불림
    • 대표 언어 : SQL
  • 명령형 프로그래밍(imperative programming)의 반대말
    • 명령형 프로그래밍 언어 : C/C++, Java
  • 함수형 프로그래밍 패러다임을 활용하는 것을 말함
    • 람다식 등의 함수형 언어 도구들을 적극적으로 활용해야 함 있음

쉬운 이해를 위한 예제 출처

1.// 명령형 프로그래밍
2.b = 27
3.c = 33
4.a = b + c
5.print(a) // 60
6.c = 40
7.print(a) // 60
8.
9.// 반응형 프로그래밍
10.b = 27
11.c = 33
12.a = b + c
13.print(a) // 60
14.c = 40
15.print(a) // 67

왜 함수형 프로그래밍이 주목 받을까?

자세한 내용

  • Multi-Core & Concurrency
    • Multi-Threading SW 필요. 하지만, CPU가 한계에 봉착해 여러 칩이 병렬적으로 동작하도록 만드는 전략 선택
    • Immutable Data인 함수형 언어는 Concurrency를 지원하기에 적합
  • 코드의 간결함
    • 함수형 프로그래밍의 중요 개념인 Curry, Partial Application, Monad와 같은 기법이 간결하고 우아한 함수의 구성(Composition)을 가능하게 해준다.
  • C#과 Java 같은 기존 언어가 관리모드로 접어듦
    • 함수형 패러다임은 객체지향 패러다임의 뒤를 이을 새로운 패러다임으로 주목받고 있음

Reference

아래를 제외한 Reference들은 관련 내용 부분에 바로 연결시켜두었습니다.
Reference에 자세한 내용이 설명되어 있으니 참고바랍니다.

반응형