Home

오늘의 기억

[Functional Programing] 함수형 프로그래밍


함수형 프로그래밍이란

함수형 프로그래밍이란 함수를 1급 객체순수 함수 로 프로그래밍 하는 것을 뜻한다.

1급 객체

1급 객체란 다음 세 가지 조건을 만족한다는 뜻이다.

  1. 변수나 데이터에 할당할 수 있어야 한다.
  2. 객체의 인자로 넘길 수 있어야 한다.
  3. 객체의 반환값으로 반환할 수 있어야 한다.

이러한 1급 객체의 조건들이 변수, 데이터 뿐만 아니라 함수 자체에도 적용이 되어야 한다는 의미이다.

순수 함수 (Pure functions)

순수 함수란 함수 수행과 결과가 외부의 값에 종속되지 않아야 한다는 큰 조건을 가지고있다. 즉, 다시말해 매개변수를 입력받고 출력을 반환함에 있어서 모든 조건과 결과는 함수 내부에서 시작하고 내부에서 끝나야한다는 의미이다.

// pure function
const double = num => (num * 2);

// impure function
const operand = 2;
const multiple = num => (num * operand);

특징

코드를 간결하게 하고 가독성을 높여, 로직에 집중

함수형 프로그래밍에서 함수를 작성할 때는 외부 조건을 신경쓸 필요가 없다. 오로지 함수 내에서의 로직에 집중하여 코드를 작성할 수 있으며 코드를 좀 더 간결하고 가독성을 높일 수 있다.

동시성 작업이 쉽고 안전하다.

여러 쓰레드에서 한 번에 동시에 접근을 하더라도 사이드 이펙트가 발생되지 않는다. 또한 Lock이나 UnLock 같은 보호 장치도 필요가 없다.

테스트가 간편하다.

함수형 프로그래밍에서 테스트는 오로지 함수에 대해서만 테스트 케이스를 작성하면된다. 따라서 TDD 같은 테스트 주도 개발이 간편하고 버그를 최소화 할 수 있다.

Caching

함수의 입력 값에 따라 결과 값을 캐싱해 두면 같은 입력 값이 들어올때 바로 반환시키는 캐싱 기능을 구현할 수 있다. 그럼 프로그램이 최적화가 가능하며 더 빨리 처리가 가능하다.


결론

다양한 언어들이 이미 객체지향과 절차지향으로 작성되어 있고, 실제 구동되고 있다. 이처럼 무작정 함수형 프로그래밍으로만 프로그램을 작성하기엔 어려운 부분이 많다.

그러나 객체지향, 절차지향과 같이 함께 공존할 수 있는게 이 함수형 프로그래밍의 특징이다. 상황에 따라 적절한 프로그래밍 패러다임을 선택하는게 중요하다는 뜻이다.

따라서 Java, C#, JavaScript 등 다양한 프로그래밍 언어에서 객체지향과 함수형 패러다임을 동시에 지원하고 있다.

20180918 Charyum.Park