선언형과 함수형 프로그래밍

김하밍·2023년 7월 9일

CS 스터디

목록 보기
6/11

프로그래밍 패러다임


프로그래밍 패러다임(Programming Paradigm)은 프로그래머에게 프로그래밍의 관점을 갖게 하고 코드를 어떻게 작성할 지 결정하는 역할을 합니다.

어느 하나가 다른 하나를 대체할 수 있는 것이 아니라, 우리가 원하는 코드에 따라 적절한 것을 잘 골라서 선택하여 사용해야 합니다. 또는 여러가지를 병합해서 사용할 수도 있습니다.

선언형 프로그래밍

'어떻게' 할건지를 나타내기보다 '무엇'을 풀어내는가에 집중하는 패러다임이다.


  • 함수형 프로그래밍

함수형 프로그래밍

작은 '순수 함수'들을 블록처럼 쌓아 로직을 구현하고 '고차 함수'를 통해 재사용성을 높인 패러다임입니다.

(함수형 공장 예시)

  • 인풋과 아웃풋이 있다. 그들 각자의 역할대로 처리할 중간재료를 넘겨주고 그걸 또 다음에게 넘겨줌으로써 같은 인풋이 입력된다면 언제나 동일한 아웃풋이 나온다.
  • 오로지 자신에게 주어진 재료로만 처리한다. 외부 환경으로부터 철저히 독립적이다.

즉, 다음 직원에게 넘겨주는 결과물 외에는 아무런 영향을 주지 않는다. => 순수 함수의 특징


(파이프라인 예시)

  • 파이프라인 외부에서는 내부의 상태를 보거나 접근할 수 없다.
  • 파이프라인 외부에서도 외부의 상태를 보거나 접근할 수 없다.


이런 특징을 가진 파이프라인(함수)들을 적용하고 묶어서 프로그램을 구성해 나가는 기법을 함수형 프로그래밍이라고 한다.

함수형 프로그래밍의 특징


  1. 순수 함수: 출력이 입력에만 의존하는 것을 의미합니다.

    외부의 상태값을 참조하거나, 외부의 상태를 변경하는 것은 순수함수라고 볼 수 없습니다.

  2. 불변성을 유지해야 합니다.

  3. if, for, switch X

    for loop를 이용해서 배열을 돌고있다면, 함수형 프로그래밍이라고 할 수 없습니다.!

  4. 일급객체, 고차함수

function multiplyBy(factor) {
  return function (number) {
    return number * factor;
  };
}

const multiplyByTwo = multiplyBy(2);
console.log(multiplyByTwo(5)); // 출력: 10
  • 고차 함수: 고차 함수란 함수를 값처럼 매개변수로 받아 로직을 생성할 수 있는 것 입니다.
    고차 함수를 쓰기 위해서는 해당 언어가 일급 객체라는 특징을 가져야 합니다.
  • 일급 객체: 함수에 인자로 전달하거나 리턴하는 등의 일들을 할 수 있습니다.

자바에서의 함수형 프로그래밍


자바에서도 함수형 프로그래밍을 적용하여 코드를 작성하고, 함수형 프로그래밍의 이점을 활용할 수 있습니다.

람다식: 익명 함수를 작성하기 위한 간결한 문법을 제공합니다. 이를 통해 함수를 변수에 할당하거나 다른 함수의 매개변수로 전달할 수 있으며, 함수형 인터페이스를 통해 구현할 수 있습니다.

스트림 API: 데이터를 처리하기 위한 풍부한 기능을 제공합니다. 스트림을 사용하여 데이터를 순착적으로 처리하거나 병렬로 처리할 수 있으며, 맵핑, 필터링, 정렬 등 다양한 데이터 조작 작업을 지원합니다.
함수형 스타일로 데이터 처리를 표현할 수 있도록 도와줍니다.

UI 애플리케이션 특성 상 많은 상태 변화가 일어나기 때문에 순수 함수형 프로그래밍만으로는 무리가 있습니다.

함수형 + 반응형 프로그래밍 또는 객체지향 + 함수형 프로그래밍의 조합을 통해 좀 더 안정적이고 더욱 개발자의 의도에 적합한 프로그래밍을 할 수 있습니다.

참조

얄팍한 코딩사전 - 함수형 프로그래밍이 뭔가요 ?
드림코딩 - 함수형 프로그래밍이 대세다?! (함수형 vs 객체지향)

profile
나만의 언어로 기록하며 성장하기 !

0개의 댓글