함수형 프로그래밍이 뭔가요?

객체지향과는 또 다른 패러다임! 뭔가 세련되어 보이지만 알듯 모를듯한 개념이죠.

두 🍫 공장의 예시를 통해 함수형 프로그래밍에 대한 감을 잡은 뒤,
이 패러다임이 왜 만들어졌고 어떤 장점을 갖는지

그리고 이에 사용되는 개념들과 예시코드를 통해 함수형 프로그래밍을 알아가보기로 해요!


함수형 프로그래밍을 도와주는 라이브러리 및 도구들

  1. 🔗 ReactiveX - 언어별로 강력한 함수형 라이브러리 구축
  2. 자바스크립트용 함수형 프로그래밍 라이브러리들


함수형 프로그래밍에 최적화된 언어들



⌨️ 영상에 사용된 예제 코드

함수도 '값'이다.

var say_it = function (given) { console.log(given); } const say_it = (given) => console.log(given); say_it('안녕'); ['안녕하세요 ', '저는 ', '얄코입니다.'].forEach(say_it);

고계함수

const calc = (num1, num2, op) => op(num1, num2); const add = (num1, num2) => num1 + num2; const multiply = (num1, num2) => num1 * num2; const power = (num1, num2) => Math.pow(num2, num1); var calc = function (num1, num2, op) { return op(num1, num2); } var add = function (num1, num2) { return num1 + num2; } var multiply = function (num1, num2) { return num1 * num2; } var multiply = function (num1, num2) { return Math.pow(num2, num1); } console.log( calc(2, 3, add) ); // 5 console.log( calc(2, 3, multiply) ); // 6 console.log( calc(2, 3, power) ); // 8

다른 함수를 반환하는 고계함수

const calcWith2 = (op) => (num) => op(2, num); var calcWith2 = function (op) { return function (num) { return op(2, num); }; }

커링(스칼라)

def add(num1: Int, num2: Int): Int = num1 + num2 add(2, 3) def add_curry(num1: Int)(num2: Int): Int = num1 + num2 add_curry(2)(3) val add2 = add_curry(2)(_) add2(9)

커링(자바스크립트)

var add_curry = function (num1) { return function (num2) { return num1 + num2; } } const add_curry = (num1) => (num2) => num1 + num2;

함수 컴비네이터(스칼라)

def main(args: Array[String]): Unit = { val students = List( new Student("홍길동", "문과", "문학"), new Student("전우치", "이과", "기계"), new Student("임꺽정", "이과", "화학"), new Student("일지매", "문과", "언론"), new Student("장길산", "예체능", "체조"), new Student("연흥부", "이과", "컴퓨터"), new Student("연놀부", "이과", "수학"), new Student("옹고집", "문과", "경영"), new Student("이몽룡", "문과", "정치"), new Student("연오랑", "예체능", "사진") ) println( students .filter(i => i.division == "이과") .take(3) .map(i => s"${i.name}(${i.major})") .foldLeft("")((i, j) => i + " " + j) ) }

함수 컴비네이터(자바스크립트)

console.log( _(students) .filter((i) => i.division === '이과') .take(3) .map((i) => `${i.name}(${i.major})`) .reduce((sum, i) => sum + " " + i) )


🎬 영상 주요 포인트

📬 함수형 프로그래밍의 특징

첫째, 인풋과 아웃풋이 있다는 것. 이 친구들에게 일을 시키는 방법은 그들의 역할대로 처리할 중간재료를 넘겨주는겁니다. 그러면 각자 맡은 작업을 해서 결과물을 반환하게 되죠. 둘째, 외부 환경으로부터 철저히 독립적입니다. 이쪽 친구들처럼 다른 곳에 뭘 적어두지도, 참조하지도 않아요. 오로지 자신들에게 주어지는 것들로만 정해진 작업을 하는거죠. 셋째, 방금 그 두번째 특성 덕분에 가능한 건데 같은 인풋에 있어서 언제나 동일한 아웃풋을 생산해내요. 외부 요인에 영향을 받지 않으니, 철저히 들어오는 재료에 따른 결과물이 만들어지고 다른 직원들에 대해서도 넘겨주는 결과물 외에는 아무 영향을 주지 않죠. 때문에 이 친구들이 이렇게 연결되어 있는 이상 같은 양과 종류의 카카오를 넣어주면 언제나 같은 수와 품질의 초콜릿이 만들어질 걸 기대할 수 있을거에요. ... 함수형 프로그래밍이 주목받게 된 주요 이유 중 하나가 이와 같은, '부작용'에 의한 문제로부터 보다 자유롭다는거에요. 여기서 말하는 부작용은, 어떤 함수의 동작에 의해 프로세스 내 특정 상태가 변경되는 상황을 말해요. 변경된 상태는 다른 동작들에게 영향을 미치겠죠.

⭐️ 영상에서 코드 예제와 함께 살펴보세요!


🍿 더 자세한 내용은 영상에서 보실 수 있습니다.





관련 태그의 다른 영상들

함수형 프로그래밍이 뭔가요?
객체지향과는 또 다른 함수형 프로그래밍! 그 재미에 빠져봅시다.
# function
# currying
# 순수함수
# 고계함수
...