PracticeEveryday

수학의 함수와 프로그래밍의 함수 본문

정리/Question

수학의 함수와 프로그래밍의 함수

kimddakki 2022. 5. 19. 12:47
함수 函 상자(지닐) 함 數 셈 수 

" 정의역 집합 의 원소 x를 정확히 하나의 공역 집합의 원소 y에 대응되는 관계 "

 

 - 어떤 집합의 각 원소를 다른 집합의 유일한 원소에 대응되는 것이다.

   => 하나의 값은 오직 하나의 값을 갖는다.

 - 그렇기 때문에 함수란 어떤 값을 연산했을 때 특별한 조건 없이 어떤 값이 나올 지 알 수 있어야 한다.

 


차이점 1)

 - 수학의 함수는 참조 투명성 ( Referential Transparency)를 갖는데 어떤 함수에 대해서, 인자만 같다면 항상 같은 

   같은 값으로 evaluate( 평가 ) 된다는 뜻이다.

   만약 f(x) = x + 5 라면 f( 0 )은 5로 항상 대체 가능하다.

 

 - 하지만 프로그래밍에서는 참조 투명성이 항상 지켜지는 것이 아니다.

   가장 쉽게 떠올릴 수 있는 예로, 전역 변수를 사용하는 함수를 생각해 볼 수 있다.

let global;

function sum(a) {
  return a + global;
}

console.log(sum(global)); // ?

 - sum( 0 )에 대해서 리턴값이 유일하게 결정되는가? 전역 변수 global 값에 의해 얼마든지 달라질 수 있다.

   즉 sum( 0 )이 0일 수도, 그 외의 값일수도 있으므로 sum( 0 )을 항상 같은 값으로 evaluate 혹은 대체 할 수 없다.

 

※ 물론 프로그래밍의 함수도 참조 투명성을 가질 수 있다. 함수 구현을 통해 얼마든지 가질 수 있는 특성이고, 

   아예 함수형 언어처럼 참조 투명성을 강제하는 것도 가능하다.

 

차이점 2)

 - 프로그래밍의 모든 함수의 인자는 가질 수 있는 값이 유한하다. => 프로그래밍 함수의 인자는 항상 유한 집합이다.

 - int를 예로 들면 32비트 시스템에서 오직 2^32가지의 인풋을 가질 수 있을 뿐이다. long long이나 bigint등의 더 큰

   자료형을 가질 수도 있지만 인풋 가짓수가 유한하다는 데에는 변함이 없다.

    => 이는 유한한 메모리를 갖고 유한한 시간 내에 종료되어야 하기 때문이다. 

          반면 수학의 경우 무한 집합에 대해서도 얼마든지 정의 될 수 있다 f( x ) = x + 2 x는 자연수로 정의하면 이미

          인자가 무한 집합이다.

 

 - 프로그래밍에서 진정한 의미의 실수 ( Real number)는 존재할 수가 없으므로 foat이나 double등도 한정된 인풋을 

   가지며 마찬가지로 2^bits가지의 인풋이 준재할 수 있다. 

 - 즉 프로그래밍 함수는 가산 집합에 대해서만 정의 될 수 있다. 반면에 수학에서의 함수는 실수나 복소수 등 

   비가산 집합에 대해서도 얼마든지 정의 할 수 있다.

 

차이점 3)

 - 수학에서는 공집합( 리턴값이 없다 )이 아닌 집합으로 대응되는 함수를 정의할 수 없지만 프로그래밍에서는 

   얼마든지 가능하다. 리턴 값이 void인 함수들이 여기에 해당한다.

 

블로거를 쓴 저자의 추측

 => 사실 애당초 프로그래밍에서 함수른 이름은 잘못 되었다. 즉, 애당초 비교될 대상이 아닌 데 처음에 이름을 잘 못 지었기 때문이다. 프로그래밍에서 함수는 단순히 subroutine (: 서브루틴(한 프로그램 내에서 필요할 때마다 되풀이해서 사용할 수 있는 부분적 프로그램), 혹은 computational: 계산적인 procedure: 절에 불과하다. 초기 프로그래밍 언어의 함수는 수학 함수를 모방하여 만들어 졌지만, 현대 컴퓨팅 아키텍처 상의 한계 때문에 수학의 함수와 동일 할 수 없다. 위의 [2]가 이에 해당한다. 또한 편의상의 이유로 다른 특징을 갖는 경우도 있다. 위의 [3]이 이에 해당한다. [1]은 기본적으로 편의상의 차이점이지만 관점에 따라선 컴퓨팅 아키텍처 상의 한계로 볼 수도 있겠다.

 


 

 

수학의 함수와 프로그래밍에서의 함수의 차이

수학의 함수와 프로그래밍에서의 함수는 모두 '함수'라는 이름을 공유하지만 상당히 다른 특징을 갖는다. 이에 대해 알아보자. [1] 수학의 함수는 참조 투명성(Referential Transparency)를 갖는다. 무슨

showx123.tistory.com

 

 

What is the difference between functions in math and functions in programming?

What is the difference between functions in math and functions in programming?

stackoverflow.com

 

'정리 > Question' 카테고리의 다른 글

Internet vs WWW ( World Wide Web )  (0) 2022.05.30
Method vs Function  (0) 2022.05.19
1바이트 === 8비트 + Parity Bit  (0) 2022.05.16
컴퓨터는 왜 2진수를 쓸까  (0) 2022.05.16
웹 브라우저의 동작 원리  (0) 2022.05.16
Comments