본문 바로가기
IT 공부/CS ( compute system)

함수형 프로그래밍

by woohot 2023. 5. 2.

객체지향형 프로그래밍을 먼저 접했었다.

 

최근데 많이 들리고 보이는 함수형 프로그래밍에 대해 알아보려 한다.

 

프로그래밍 패러다임

명령형 프로그래밍 :  무엇을 어떻게 할 건지에 대해 초점

 - 절차지향 프로그래밍: 수행되어야 할 순차적인 처리 과정을 포함하는 방식 ( C ,C++ )

 - 객체지향 프로그래밍: 객체들의 집합으로 프로그램의 상호작용을 표현 ( C++ , Java , C#)

 

선언형 프로그래밍:  무엇을 한건지에 대해 초점

 - 함수형 프로그래밍: 순수함수를 조합하고 소프트웨어를 만드는 방식( 클로저, 하스켈, 리스프)

 

함수형 프로그래밍이란?

함수형 프로그래밍은 거의 모든 것을 순수 함수로 나누어 문제를 해결하는 기법으로,

작은 문제를 해결하기 위한 함수를 작성하여 가독성을 높이고 유지보수를 용이하게 해준다.

( Clean Code (도서) 에선 대입문이 없는 프로그래밍이라고 정의하였다.)

 

위의 내용에서 많이 나온 순수함수? 생소하다  알아보자 

 

 

순수함수

순수 함수(pure function) ?

동일한 인자가 전달되면 동일한 값을 반환하는 함수이며 부수 효과(Side Effect) 가 없어야 한다.

  • Memory or I/O의 관점에서 Side Effect가 없는 함수
  • 함수의 실행이 외부에 영향을 끼치지 않는 함수

ex)

순수 함수
#1
function addition(number1, number2)
{ return number1 + number2; };

console.log(addition(1,1));
// 2

console.log(addition(1,1));
// 2

#2
const init = 0;
const add=(number,init=0) => {
    return number+init;
}
add(3,init);
add(3);
!순수 함수
#1
let otherNumber = 10;
function addition(number1, number2)
{  return  number1 + number2 + otherNumber; };

console.log(addition(1,1));
// 12

otherNumber = 20;
console.log(addition(1,1));
// 22

#2
const init = 0 ;
const add= (number) => {
    return number + init;
}
add(3)

 

그리고 

부수효과( Side Effect ) 

함수 외부의 값을 변경하는 경우 이다 

  • 변수의 값이 변경됨
  • 자료 구조를 제자리에서 수정함
  • 객체의 필드값을 설정함
  • 예외나 오류가 발생하며 실행이 중단됨
  • 콘솔 또는 파일 I/O가 발생함

 

1급 객체( First-Class Object )

다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체를 가리킨다.

  • 변수나 데이터 구조 안에 담을 수 있다.
  • 파라미터로 전달 할 수 있다.
  • 반환값으로 사용할 수 있다.
  • 할당에 사용된 이름과 무관하게 고유한 구별이 가능하다.

함수형 프로그래밍에서 함수는 1급 객체로 취급 받기 때문에 위의 예제에서 본 것 처럼 함수를 파라미터로

넘기는 등의 작업이 가능한 것이다.

함수형 프로그래밍에서 정의하는 순수 함수들과는 다르다는 것을 인지해야 한다.

 

참조 투명성( Referential Transparency )
  • 동일한 인자에 대해 항상 동일한 결과를 반환해야 한다.
  • 참조 투명성을 통해 기존의 값은 변경되지 않고 유지된다.(Immutable Data)

 

 

위를 참고 하면 , 모듈 같이 생각하면 비슷한 개념이라 보여진다.

 

정리하면,

함수 하면 떠오르는 것은 수학의 함수이다.

보통 수학에서의 함수는 y=f(x) 로 떠올릴 것이다.

 

문제를 풀때 5지선다에 나오는 값은 대게 하나이다. 

 

이렇게 수학의 함수의 특징이라 생각하고 읽고 비교하는 것도 좋을 것이라 생각한다. 

 

 

 

 

#참고

https://mangkyu.tistory.com/111

 

[프로그래밍] 함수형 프로그래밍(Functional Programming) 이란?

1. 함수형 프로그래밍(Functional Programming)에 대한 이해 [ 프로그래밍 패러다임(Programming Paradigm) ] 프로그래밍 패러다임(Programming Paradigm)은 프로그래머에게 프로그래밍의 관점을 갖게 하고 코드를

mangkyu.tistory.com

 

https://velog.io/@goody/JS-%ED%95%A8%EC%88%98%ED%98%95-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D

 

JS 함수형 프로그래밍

자바스크립트 프로그래밍 패러다임 중 함수형 프로그래밍에 대해서

velog.io

 

https://velog.io/@reveloper-1311/%EC%9D%BC%EA%B8%89-%EA%B0%9D%EC%B2%B4First-Class-Object%EB%9E%80

 

일급 객체(First Class Object)란?

자바스크립트를 공부하다보면 라는 말을 한 번쯤은 들어보았을 것이다. 이번에는 그 가 무엇인지에 대해서 정리해보고자 한다. 일급 객체(1급객체, First Class Object) 일급객체에 대한 정의이다. >

velog.io

 

'IT 공부 > CS ( compute system)' 카테고리의 다른 글

Restful API  (0) 2023.04.19

댓글