함수

 




1. 개요
2. 기본적(집합론적) 성질
2.1. 함수의 전사와 단사
2.6. 집합론에서의 엄밀한 정의
3. 실함수
3.1.1. 양함수와 음함수
3.2. 감소, 증가 함수
3.4. 주기함수
3.5. 실함수의 종류
3.5.1. 일차함수[1]
3.5.2. 멱함수
3.5.4. 이산함수
3.5.6. 일변수 함수의 극한
4. 복소함수
5.1. 이변수 함수
5.3. 벡터 함수
6. 해석함수
6.1. 정칙함수
10. 함수의 역사
10.1. 함수 개념의 태동
10.2. 해석함수에 대한 의문
10.3. 함수의 정의 이후
11. 프로그래밍에서의 함수
11.1. 함수의 장점
11.2. 함수 호출 시 오버헤드
11.3. 수학 함수와의 관계
11.4. 호출 규약
12. 여담
13. 관련 문서


1. 개요


두 집합 사이의 관계를 설명하는 수학의 개념. 수학적 구조를 정의할 때나 현실 응용을 비롯하여 다양한 분야에서 활용된다.
'''함수(function, )'''
---
집합 $$X,Y$$에 대한 함수 $$f$$[2]는 다음을 만족하는 대응 관계로 정의된다.
* 임의의 원소 $$x \in X$$에 대해, 그에 대응하는 원소 $$y \in Y$$가 유일하게 존재한다.[3][4]
  • 집합 $$X$$를 정의역(定義域, domain), $$Y$$를 공역(共域, codomain)이라 말한다. 함수의 정의역과 공역을 강조하려면 '$$f$$는 $$X$$에서 $$Y$$로의 함수(function from $$X$$ to $$Y$$)이다'는 표현을 사용하고, 보통 $$f:X \mapsto Y$$[5]라는 표기가 이를 의미한다.
  • 원소 $$x$$에 대응되는 원소를 $$x$$의 함숫값(value of the function) 혹은 상(相, image)이라 하고, $$f(x)$$[6]라 표기한다.
  • 모든 함숫값들을 모은 집합을 치역(値域, range)이라 부르고, 종종 $$f\left(X\right)$$로 표기된다.
보통 함수 하면 실수 집합(의 부분집합)을 정의역과 공역으로 갖는 실함수(real-valued function)를 떠올리고, 이는 실생활에서 기대하는 함수의 역할인 '''한 변수에 대한 다른 변수의 변화의 기술'''에 사용된다. 역사적으로 함수는 미적분학의 주 목적인 시간에 따른 물체 위치의 변화를 기술하면서 따라나왔다. 이것이 단순히 시간적 변화뿐만이 아니라 관련있는 숫자 둘로 일반화된 것으로 볼 수 있다. 과학에서 나오는 법칙이라고 이름 붙은 것들 대부분은 따지고 보면 뭐가 변할 때 다른 하나가 변하는 함수의 형태로 나온다는 것을 관찰할 수 있다. 비단 과학법칙이 아니라도 연관있어 보이는 두 변수가 함수로 연관되어 있다고 생각하고, 그 함수를 식으로 나타내어 결과나 경향을 예측하는 것이 함수의 주된 쓰임 중 하나인 '''모델링'''(modeling)이다. 이 함수의 증감추세를 그림으로 한눈에 표현하는 그래프(graph)는 덤이다. 이런 상황에선 $$x$$, $$y$$를 각각 '''독립변수'''(獨立變數, independent variable), '''종속변수'''(從屬變數, dependent variable)라 부르는 경우가 많다. 흔히 말하는 '다변수함수'도 독립변수와 종속변수가 실수 여러 개로 늘어났다는 거 말고는 여기서 크게 벗어나지 않는다.
하지만 이렇게만 함수를 생각하며 저 위의 정의를 보면 적잖은 괴리감을 느낄 것이다. 일반적인 함수는 정의역과 공역이 수의 집합일 필요도 없고, 따라서 그래프는커녕 '변수'니 '변화'니 하는 말부터 의미가 없다. 현대적인 함수의 정의는 수학자 디리클레 혹은 데데킨트의 정의[7]로, 굳이 식이니 변화니 하는 부분을 다 쳐내고 저렇게 추상적인 부분만 남긴 이유는 수학 중 해석학의 발전에 따른 수학자 수요가 일차적 원인이다. 간단히 말하면 식이나 변화(미분)의 요소가 없는 함수도 같이 생각을 해주는 게 더 일관성이 있었다. 자세한 이야기는 아래의 '함수의 역사' 부분에 서술.
물론 해석학 하나 때문에 저렇게 바꾼 건 아니다. 함수의 추상적 정의는 해석학 밖에 수학 여러 분야에서도 수가 포함되지 않는 광범위한 개념들을 함수로 편입시키며 큰 영향을 끼쳤다. 대학수학 정도만 가도 '함수의 공간'에서 '함수의 공간'으로의 '함수'[8]와 이상해 보이는 함수들이 마구 튀어나오는데, 익숙해지면 생각보다 유용하게 써먹을 곳이 많다. 일상생활과 관련이 많은 이산수학에서도 알고리즘, 관계, 분류 등을 생각할 때 여기저기서 튀어나온다. 아래 프로그래밍 함수도 따지고 보면 여기서 비롯되었다.

2. 기본적(집합론적) 성질



2.1. 함수의 전사와 단사


  • $$f\left(a\right)=f\left(b\right)\Rightarrow a=b$$ : 단사(單射, injective) 또는 일대일이라 하고 일대일인 함수를 단사함수 또는 일대일함수이라 한다.
함수가 일대일 함수임을 보일 때는 정의를 사용하기도 하지만, 명제의 대우#s-4로 $$a\ne b \Rightarrow f\left(a\right) \ne f\left(b\right)$$를 사용하기도 한다.
  • $$\forall y\in Y,\exists x\in X, f\left(x\right)=y$$. 즉 치역과 공역이 같을 때를 전사(全射, surjective) 또는 ($$X$$에서) $$Y$$ 위로(onto)의 함수라 한다. 전사인 함수를 전사함수이라 한다. [9]
  • $$f:X\mapsto Y$$가 전사이고 단사일 때 $$f$$를 전단사(全單射, bijective)라 한다. 전단사인 함수를 전단사함수 또는 일대일 대응(one-to-one correspondence)이라 한다. one-to-one & onto라고도 많이 사용한다.
유럽에서 사용하는 단사 (injectif), 전사(sejectif), 전단사(bijectif) 등의 용어는 부르바키가 처음으로 도입했다.

2.2. 합성함수


合成函數, Function composition


2.3. 항등함수


恒等函數, identity function


2.4. 역함수


逆函數, inverse function


2.5. 연속함수


連續函數, continuous function


2.6. 집합론에서의 엄밀한 정의


함수는 관계, 즉 순서쌍들의 집합이다. 각 순서쌍의 왼편이 함수에 넣어지는 값, 오른쪽이 함숫값을 나타낸다. 즉, 집합론에서의 함수의 정의는 함수를 식이 아닌 그래프로서 바라본 것이다. 예를 들어, 함수 $$ f : \mathbb{R} \mapsto \mathbb{R} $$, $$ f(x)=x^2 $$는 집합론에서의 정의에 따르면 이 함수의 그래프 위의 점들 $$ (x, y) = (x, x^2) $$의 집합 $$ f= \left\{ (x, x^2) : x \in \mathbb{R} \right\} $$ '''그 자체'''이다. 만약 함수에 넣어지는 값이 여러 개이면 왼편은 그 값들의 순서쌍이 된다. 이때, (a,b)와 (a,c)가 모두 함수의 원소이면 b = c이어야 한다. 즉, 하나의 값에 하나에 함숫값이 대응되어야 한다. 이 함수에 속한 순서쌍들 중 왼편의 것을 모두 모은 집합을 함수의 정의역, 오른편의 것을 모두 모은 집합을 함수의 치역이라고 한다. 이 정의를 이용해 함수 합성의 교환법칙과 결합법칙도 증명할 수 있다. ...사실 이건 좀 덜 엄밀한 이야기이다. 실제 함수는 이 순서쌍들의 집합 말고도 정의역, 공역이 순서쌍들의 집합과 3-tuple을 이룬 것을 말한다. 즉, $$D$$를 정의역, $$R$$을 공역이라고 하고 $$f(x) \in R$$이 '''각 $$x \in D$$에 대하여 빠짐없이 딱 하나만 주어져 있을 때''' $$ P = \left\{ (x, f(x)) : x \in D \right\} $$로 정의하면 $$f = (D, R, P)$$로 정의된다는 것이다.[10] 공리적 집합론을 공부했다면 이 정의는 (공리적) 집합이 아닌 것들에 함수를 주는 일을 방지하기 위한 안전장치로 볼 수 있고, 즉 ZFC 공리계 같은 걸 진지하게 파고들지 않는 이상은 일상생활에서까지 이렇게까지 할 필요는 없다.

3. 실함수


우리가 보통 생각하는 함수로, 실수집합의 부분집합을 정의역으로 하고, 실수집합을 공역으로 하는 함수이다. 더욱 엄밀하게 표현한다면 '정의역이 실수인 실가함수(real-valued function)'라 할 수 있는데 특히 정의역이 실수이지만 공역이 복소수인 경우(complex-valued function)와 구별하기 위해 이 용어를 사용한다.
많은 경우에는 함수가 수식으로만 주어진 경우가 많은데, 이럴 경우에는 함수가 식을 만족시키며 정의될 수 있는 최대의 영역인 '자연스러운 정의역'(natural domain)을 정의역으로 생각한다. 다항함수, 삼각함수 같으면 자연스러운 정의역은 실수집합 전체겠지만, $$f(x) = \sqrt{x}$$의 자연스러운 정의역은 $$x \ge 0$$ 정도로 간주될 수 있다. 별다른 언급이 없으면 정의역은 이 자연스러운 정의역으로, 공역은 실수집합으로 간주한다. 물론 정의역으로 어떤 부분집합을 생각해도 문제는 없다.
때때로 정의역의 다른 부분에서 다른 식을 사용함으로써 함수를 묘사하는 경우가 있는데, 이를 '조각적 정의'(piecewise definition)라 부르기도 한다. 한 예로 절댓값 함수는 다음처럼 조각적으로 정의될 수 있다.
$$\left | x \right |=\begin{cases} x & \mathsf{if} \ x \ge 0 \\ -x & \mathsf{if} \ x < 0\end{cases}$$
이 방정식의 우변은 함수가 $$x \geq 0$$이면 $$x$$, $$x<0$$이면 $$-x$$임을 의미한다. 이렇게 정의되는 함수를 조각적으로 정의된 함수(piecewise-defined function)라 부르기도 한다. 이러한 조각적 정의 함수는 부호 함수 $$\mathrm{sgn} \left(x\right)$$, 디리클레 함수 $$\bold{1}_{\mathbb{Q}} \left(x\right)$$ 등이 존재한다.
이름답게 실해석학의 주요 대상이다.

3.1. 그래프


만약 $$f$$가 정의역이 $$D$$인 함수라면, $$f$$의 그래프는 $$\{\left(x,\ f\left(x\right)\right)\ |\ x\in D\}$$이다. 그래프는 일반적인 함수에 대해서도 정의되긴 하지만(사실 위의 함수의 집합론적 정의에서는 이 '그래프' 자체가 함수의 정의이다) 보통은 실함수에 대해서 주로 생각한다. 실함수의 경우는 정의역과 공역이 실수이므로 그 그래프는 곱집합 $$\mathbb{R} \times \mathbb{R}$$, 즉 평면의 부분집합으로 나타낼 수 있다.
예를 들어 함수 $$f(x)=x+2$$의 그래프는 $$y=x+2$$인 점 $$\left(x,\ y\right)$$들의 집합이다. 아래 그림에서 $$x=0$$인 점을 '''$$\boldsymbol x$$절편''', $$f(x)=y=0$$인 점을 '''$$\boldsymbol y$$절편'''이라고 한다.[11]
[image]
좌표 평면의 $$x$$축을 독립변수로 하고 각각의 $$x$$값에 대응하는 $$y$$값으로 수많은 점 $$\left(x,y\right)$$을 찍어 선으로 연결하면 그래프를 만들 수 있는데, 이런 식으로 좌표평면 위에서 만들어지는 도형들에 대해 연구하는 학문이 해석기하학이다. $$y=ax+b$$ 꼴의 함수로 그래프를 그리면 직선이 되고, $$y=\left(x-a\right)^2+b$$는 포물선, $$\left(x-a\right)^2+\left(y-b\right)^2=r^2$$는 이 되는 식. 물론 초등적인 의미에서 원은 함수가 아니다. $$x^2+y^2=1$$이라는 원의 방정식에 대해 $$x={1\over 2}$$ 에 대응하는 값이 두 개가 나오기 때문. 이에 대해서는 보통 다음 음함수(implicit function)의 개념을 통해 함수로 이해하게 된다.

3.1.1. 양함수와 음함수


양함수(陽函數, explicit function) 는 우리가 원래 알고 있는 꼴인 $$ y = f \left( x \right) $$가 맞는다. 종속변수를 독립변수에 대하여 표현한 것이다. 이 함수가 우리가 보고 이해하기 쉬운 꼴이다. 함수에 대한 정보가 꼴을 보면 바로바로 튀어나오기 때문이다.
음함수(陰函數, implicit function)는 $$ f \left( x, y \right) = 0 $$ 꼴로 정리되는 $$ x, y $$에 대한 모든 식을 말한다. 알다시피 이런 꼴로 정리 되는 유명한 방정식인 원의 방정식은 함수가 아니다. $$ x^2 + y^2 - 1=0$$을 생각해보면 $$ x = {1 \over 2}$$에 대응하는 값이 두 개가 나오기 때문에 일반적인 함수는 아니다. 그러나 저 방정식은 $$y = \sqrt{1-x^2}$$과 $$y = - \sqrt{1-x^2}$$의 두 개 함수를 은연 중에 포함하고 있다. 그래서 저러한 형태의 함수를 음함수라고 부르는 것이다.
주어진 식이 함수인지 아닌지 판단하는 방법은 정의역에 속하는 임의의 $$ x $$값에 오직 하나의 $$ y $$값의 대응하는지 확인하면 된다.[12][13]

3.1.2. 닮은꼴 함수


함수들 중에는 그래프만으로는 구별이 어려운 함수들이 있다. 자세한 내용은 문서 참조.

3.2. 감소, 증가 함수


$$f$$가 구간 $$I$$에서 정의된 함수이고 $$x_1,\ x_2$$가 $$I$$의 임의의 두 점이라고 하자.

1. 만약 $$x_1<x_2$$일 때 $$f\left(x_1\right) \le f\left(x_2\right)$$이면 함수 $$f$$는 $$I$$에서 '''증가''' 혹은 '''단조증가'''한다고 말한다. 만약 $$f(x_1) < f(x_2)$$가 만족된다면 '''강증가'''라고 말한다.

2. 만약 $$x_1<x_2$$일 때 $$f\left(x_1\right) \ge f\left(x_2\right)$$이면 함수 $$f$$는 $$I$$에서 '''감소''' 혹은 '''단조감소'''한다고 말한다. 만약 $$f(x_1) > f(x_2)$$가 만족된다면 '''강감소'''라고 말한다.

증가, 감소 함수의 정의가 $$x_1<x_2$$인 구간 $$I$$의 모든 쌍 $$x_1,\ x_2$$에 대해서 만족되어야 한다는 것을 아는 것이 중요하다. 구간 $$I$$는 유한할 수도, 무한할 수도 있다.

3.3. 짝함수/홀함수


Even/Odd Function
대칭함수 문서 참조.

3.4. 주기함수


週期函數, periodic function
[image]
대표적인 주기함수인 사인함수.
함숫값이 일정 주기로 반복되는 함수. 기본적으로 전단사가 아니기 때문에 역함수를 만들기 위해서는 정의역을 주기 길이로 잘라내야 한다. 가령 위의 사인함수의 역함수 $$\arcsin (x)$$는 함숫값이 $$\left[-\dfrac{\pi}{2},\dfrac{\pi}{2}\right]$$가 되고 이로 인해 정의역이 $$[-1,1]$$이 된다.

3.5. 실함수의 종류



3.5.1. 일차함수[14]


一次函數, linear function
상수 $$m$$와 $$b$$에 대하여 $$f(x)=mx+b$$형태의 함수를 일차함수라고 부른다. $$b=0$$일 때 함수 $$f(x)=mx$$는 원점을 지나고 특히 $$m=1$$일 때 함수 $$f(x)=x$$를 항등함수라고 부른다. $$m=0$$일 때는 상수함수라고 부른다. 그리고 원점을 지나고 기울기가 양수인 일차함수를 비례 관계라고 부른다.

한 변수가 항상 다른 한 변수의 상수배라면, 즉 0이 아닌 상수 $$k$$에 대하여 $$y=kx$$라면, 두 변수 $$y,\ x$$가 비례한다고 말한다.

만약 변수 $$y$$가 $$1/x$$에 비례하면 $$y$$는 $$x$$에 반비례한다고 말한다.
선형대수학은 이 일차함수를 집중적으로 연구하는 학문이다.

3.5.2. 멱함수


冪函數, power function
$$a \in {\mathbb R}$$[15]인 $$a$$가 상수일 때, 함수 $$f(x)=x^a$$를 멱함수라고 부른다. 대표적으로 다음과 같은 경우가 있다.
  • $$a=n$$(양의 정수)일 때
함수 $$f(x)=x^n$$는 모든 실수에 대하여 정의되고 $$n$$이 커질수록 구간 $$(-1,\ 1)$$에서는 $$x$$축에 점점 가까워지고 나중에는 거의 달라붙는다. $$|x|>1$$에서는 더 가파르게 증가한다. 항상 $$(1,\ 1)$$과 원점을 지난다.
  • 짝수 차수 함수는 [math((-\infty,\ 0])]에서 감소하고 [math([0,\ \infty))]에서 증가한다.
  • 홀수 차수 함수는 $$(-\infty,\ \infty)$$에서 증가한다.
  • $$a=-n$$(음의 정수)일 때
함수 $$\displaystyle f(x)=x^{-1}=\frac{1}{x}$$, $$\displaystyle f(x)=x^{-2}=\frac{1}{x^2}$$, ...는 0으로 나눌 수 없으므로 $$x \neq 0$$인 모든 $$x$$에서 정의된다. 원점에서 멀어질수록 축에 점점 가까워진다.
  • $$n$$이 홀수일 때 $$\displaystyle y=\frac{1}{x^n}$$의 그래프는 원점에 대하여 대칭이고 $$(-\infty,\ 0),\ (0,\ \infty)$$에서 감소한다. 특히 $$n=1$$일 때의 그래프는 쌍곡선 $$xy=1$$이다.
  • $$n$$이 짝수일 때 $$\displaystyle y=\frac{1}{x^n}$$의 그래프는 $$y$$축에 대하여 대칭이고 $$(-\infty,\ 0)$$에서는 증가, $$(0,\ \infty)$$에서는 감소한다.
  • $$\displaystyle a=\frac{1}{n}$$(양의 정수의 역수)일 때
함수 $$\displaystyle f(x)=x^{\frac{1}{n}}=\sqrt[n]{x}$$는 거듭제곱근 함수이다. 특히 함수 $$\displaystyle f(x)=x^{\frac{1}{2}}=\sqrt{x},\ g(x)=x^{\frac{1}{3}}=\sqrt[3]{x}$$는 제곱근 함수와 세제곱근 함수이다.
  • $$n$$이 짝수일 때의 정의역은 [math([0,\ \infty))]이다.
  • $$n$$이 홀수일 때의 정의역은 $$(-\infty,\ \infty)$$이다.
  • $$\displaystyle a=\frac{m}{n}$$(양의 유리수)일 때
위의 $$\displaystyle a=\frac{1}{n}$$(양의 정수의 역수)일 때와 개형이 비슷하다.
  • $$\displaystyle a=-\frac{m}{n}$$(음의 유리수)일 때
위의 $$a=-n$$(음의 정수)일 때와 개형이 비슷하나, 정의역이 $$(0,\ \infty)$$인 것이 차이이다.
  • $$a \notin {\mathbb Q}$$(무리수)일 때
위의 $$a=n,\,a=-n$$과 비슷하나, 공역이 다음과 같은 차이가 생긴다.
  • $$x \geq 0$$일 경우는 실함수이다.
  • $$x < 0$$일 경우는 복소함수이다.
    • $$a < 0$$일 경우, $$\Re(f(x))$$와 $$\Im(f(x))$$는 $$x$$축에 대칭이다.

3.5.3. 다항함수


多項函數, Polynomials
음이 아닌 정수 $$n$$과 실수 $$a_0 ,\ a_1 ,\ a_2 ,\ \cdots \ a_n$$(다항식의 '''계수'''라고 부른다.)에 대하여 함수 $$p(x)=a_n x^n + a_{n-1} x^{n-1} +\ \cdots\ + a_1 x + a_0$$를 '''다항함수'''라 한다. 모든 다항함수는 $$(-\infty,\ \infty)$$를 정의역으로 가진다. $$n>0$$이고 $$a_n \neq 0$$일 때 $$n$$을 다항식의 최고차수라고 한다. 기울기가 0이 아닌 일차함수는 차수가 1인 다항함수이다. 모든 다항함수는 연속이며 미분가능하다.
중학교 3학년에서 $$ x^2 $$, 즉 2차 함수가 처음 등장하며, 3차 함수는 고등학교 1학년[16], 4차 함수는 고등학교 2학년[17]부터 나오기 시작한다.

3.5.4. 이산함수


離散函數, Discrete Function
함숫값의 집합이 연속이 아닌 함수를 뜻한다. 연속이 아니므로 미분이 불가능하기 때문에 해석학에서는 다뤄지지 않다시피 하지만, 이산수학에서는 비중있게 다뤄진다. 이산함수 중 값이 정체되어 있다가 일정 주기로 증가하는 함수는 따로 계단 함수(Step Function)로 일컫기도 한다.
대표적인 이산함수로 소수 계량 함수가 있다.

3.5.4.1. 산술함수

算術函數, Arithmetic Function
이산함수 중, 정수론적인 쓰임이 많은 함수들을 이른다. 자세한 내용은 문서 참조.

3.5.5. 병리적 함수


病理的 函數, Pathological function
여느 함수와는 동떨어진 특성[18]을 띠는 함수를 뜻한다. 자세한 내용은 문서 참조.

3.5.6. 일변수 함수의 극한




4. 복소함수


複素函數, function of a complex variable
정의역이나 공역, 또는 둘 모두가 복소수인 함수. 복소수가 반쌍형성을 갖기 때문에 연속과 미분가능성의 조건이 실함수에 비해 매우 엄격하지만 미분 가능함이 곧 연속함수이자 해석함수가 되는 깔끔한 성질을 띤다는 점이 있다. 이런 함수를 다루는 학문이 복소해석학이다.

5. 다변수 함수


多變數函數, multivariate function
함수는 위에서 말했듯이 집합 $$ X $$의 각 원소 $$ x $$에 집합 $$ Y $$의 원소 $$ y $$가 오직 하나만 대응할 때 $$ X $$에서 $$ Y $$로의 '''함수'''라고 한다. 그리고 집합 $$ X $$는 '''정의역'''이라 하고 집합 $$ Y $$는 '''공역'''이라 한다. 여기서 $$ X $$의 원소들의 상의 집합 $$ \left\{ f \left ( x \right ) | x\in X \right\} $$는 $$ Y $$의 부분집합으로 '''치역'''이라 한다. 이때 $$ x $$를 '''독립변수'''라 하고 $$ y $$를 '''종속변수'''라 한다. 여기서 일변수 함수인지 이변수 함수인지 판별하는 것은 간단히 독립 변수의 개수가 되겠다. 독립변수가 1개면 일변수 함수, 2개면 이변수 함수, n개면 n변수 함수, 변수가 '''무한히''' 많으면 무한 다변수 함수가 되겠다.
대표적인 다변수 함수로 초기하함수가 있다.

5.1. 이변수 함수


二變數函數, functions of two variables
이변수 함수는 말 그대로 독립변수가 2개인 함수이다. 일변수 함수와 다르게 꼴이 $$ z = f \left( x, y \right) $$처럼 생겼다.[19] 음함수와 헷갈리면 안 된다. 음함수는 $$ f \left( x, y \right) = 0 $$이다. 굳이 생각 하자면 음함수는 $$ x, y, z $$공간의 이변수 함수$$ z = f \left( x, y \right) $$와 평면 $$ z = 0 $$의 교선이라고 생각해도 된다. 어쨌든 이변수 함수는 일변수 함수와 다르게 실수가 실수에 대응하는 게 아니라 실수의 순서쌍 $$ \left( x, y \right) $$이 실수에 대응하는 것이다.

$$ f : R \subset \mathbb{R^2} \to \mathbb{R} $$

여기서 $$ R $$이 함수 $$ f $$의 정의역이고 공역이 실수 집합 $$ \mathbb{R}$$이 되겠다. 여기서 $$ x, y $$가 독립변수, $$ z $$가 종속변수가 된다.
일변수 함수가 $$ x, y $$축이 직교하는 평면인 2차원에서 자취가 그려지는 것처럼, 이변수 함수는 $$ x, y, z $$축이 모두 직교하는 공간인 3차원에서 자취가 그려진다.
이변수 함수는 공간상에서 그려지기 때문에 울프럼알파지오지브라 같은 것들을 동원하지 않은 이상 그리기가 쉽지는 않다. 보통 우리는 이변수 함수의 곡면의 개형을 그릴 때는 평면상에서 등고선과 등위선으로 접근한다. $$ z $$축을 일정한 상수 $$ c $$로 고정시키면 $$ z = c $$와 $$ z = f \left( x, y \right) $$의 교선이 생긴다. 이 교선을 $$ xy $$ 평면에 사영한다. 여기서 교선의 사영을 등위선, 이러한 곡선의 모임을 등고선이라 한다.
그런데, 일변수 함수처럼 보이는데도 이변수 함수인 함수가 있다. 바로 복소함수. 복소함수의 정의역은 $$\mathbb{R}$$이 아니라 $$\mathbb{C}$$인데, $$\mathbb{R}^2\to\mathbb{C}$$로 대응되는 함수[20]가 존재하기 때문에, $$\mathbb{R}^2\sim\mathbb{C}$$이 될 수 있고, 따라서 틀림없이 함수가 $$f(z)$$로 변수는 $$z$$ 하나뿐인데도, $$z=\Re(z)+i\Im(z)=x+iy$$이므로 사실상 변수가 2개인 함수인 $$g(x,y)$$로 대응시킬 수 있기 때문. 게다가 복소함수는 평범한 실함수와는 다르게, 특정 경우가 아니라면 4차원 공간에서 그려지는 함수이기 때문에, 울프럼알파지오지브라를 동원한다고 해도 완벽하게 그리는 건 불가능하다. 주로 이런 경우 그래프의 개형은 절댓값을 취해서 그리는 게 일반적.[21] 실제로 복소함수는 일반적으로 이렇게 표현한다. $$f(z)=f(x+iy)=u(x,y)+iv(x,y)$$
이렇게 낯설어 보이는 개념이지만, 의외로 일상생활에도 쓰는 곳이 있는데 대표적으로 반올림이 있다. 변수 하나는 반올림할 수, 다른 변수 하나는 소수점 자릿수로 생각하면 반올림이 2변수 함수라는 것을 알 수 있다.
이외에도 최대공약수, 최소공배수 등이 있다.

5.2. 동차함수


同次函數, homogeneous function
동차함수 문서 참조.

5.3. 벡터 함수


더 나아가, 함수의 정의역으로 수 집합이 아닌 벡터 공간을 받을 수 있는데 이를 벡터 함수(vector function)라고 한다. 벡터가 수의 '꾸러미'이기 때문에 일반적인 수로는 하기 복잡한 계산이 필요한 곳에 쓰인다.
대표적으로 내적, 외적, 거리함수 등이 있다.

6. 해석함수


解析函數, analytic function
모든 함숫값을 테일러 급수 같은 멱급수로 쪼갤 수 있는 함수.
당연하겠지만 해석함수가 아닌 함수도 있다. 절댓값 함수가 대표적으로, $$x=0$$에서의 미분계수가 $$x \neq 0$$에서의 미분계수와 일치하지 않기 때문에 해석함수가 아니다.[22]

6.1. 정칙함수


正則函數, holomorphic function
해석함수 중에서도 연속이고 매끄러운 함수를 뜻한다. 위의 병리적 함수와 대비해서 참한 함수(well-behaved function)라고 하기도 한다.

7. 초등함수


初等函數, elementary function
다항함수, 지수함수 같이 대수학적 도구로 다룰 수 있는 함수를 뜻한다. 자세한 내용은 문서 참조.

8. 초월함수


超越函數, Transcendental function
$$y=\sin x$$, $$\displaystyle y = \int_0^x{1 \over \ln t} dt$$ 같이 대수적으로 정의할 수 없는 함수들을 뜻한다. 특수함수라고도 부른다. 자세한 내용은 문서 참조.

9. 범함수


汎函數, functional
함수 그 자체를 정의역으로 삼는 함수이다. 자세한 내용은 문서 참조.

10. 함수의 역사



10.1. 함수 개념의 태동


초창기의 함수는 하나의 변수 $$y$$가 다른 변수 $$x$$의 변화에 어떻게 반응하는지 개념이었다. 이 개념이 등장하기 위해서는 '변수', '변화' 두 가지의 개념이 필요했다. 즉 '변수'를 만들어 낸 '''해석기하학'''과 '변화'를 생각해 낸 '''미적분학'''이 함수를 탄생시킨 부모인 셈이다.
시간순서로는 해석기하학이 좀 더 빠르게 나왔다. 데카르트가 좌표를 생각해내며 등장한 해석기하학은 (교과과정의 '도형의 방정식' 부분에서 나오듯이) 여러 가지 도형을 대수식으로 나타낼 수 있는 쓰임새가 있었지만, 어찌 보면 변수라는 개념의 등장 그 자체가 영향이 더 컸다. 이전에도 도형에 대해서 숫자를 대응시키기는 했지만 그것은 선분 사이의 길이비 정도에 국한되어 있었기 때문에 좌표는 현실의 공간을 수와 완전히 일대일대응시키는 첫걸음이었다. 곡선을 따라 움직일 때 좌표 x, y가 변한다는 것을 관찰하며 사람들은 그리스 수학에서는 금기시되었던 변화의 개념에 다가갈 수 있었다.
통념과는 다르게 미분의 전신인 무한소 해석(infinitesimal calculus)이 탄생한 것도 운동이 아니라 이 곡선의 궤적을 관찰하는 것이 먼저였던 것도 이러한 해석기하학의 발전에 근거했다. 이 무한소해석의 태동은 그때 마침 고개를 들고 있었던 적분이론과의 통합 등등을 통해 미적분학의 정립으로 나아가게 되고, 이것이 해석기하학과 다시 융합되어서 공간 속의 곡선에 대해 미적분을 하는 단계에 이르렀다. 이후에 시간에 따른 운동의 변화가 미분으로 설명된 것은 굳이 따지자면 조금 더 나중의 이야기이다.
함수의 이름, 즉 'function'이란 용어도 이때 라이프니츠에 의해 처음 고안되었다. 처음 라이프니츠의 함수의 의미는 기하학적인, 즉 곡선에서 두 변수의 연관 정도에 국한되어 있었지만, 여기에 요한 베르누이가 '식으로 나타내지는 대상'이라는 묘사를 갖다붙였다. 이것이 극단에 이르러 근대적 대수학의 이론이 상당히 발전한 오일러 대에는 "해석적 표현", 즉 테일러 급수(무한히 나가는 멱급수)로 나타낼 수 있는 것들을 함수라 이르게 된다. 물론 저 때에는 테일러 정리 정도는 기본으로 깔려 있었기 때문에 가능한 일이다. 어찌 보면 라이프니츠가 함수의 정의를 내렸다기보다는 함수라는 말에 이것저것 달라붙어서 커져 온 거에 가깝긴 하지만, 그래도 거대한 눈덩이의 시작이 되었다는 점은 체계를 잡았다는 느낌으로 충분히 높게 평가할 수 있다. 대신에 기호 $$f(x)$$를 고안한 것은 라이프니츠가 아니라 오일러였다. 라이프니츠는 $$df/dx$$까지 쓰긴 했지만 괄호 안에 변수를 넣진 않았었던 것이다.
다만 이렇게 불어난 함수의 의미, 즉 지금의 언어로 말하자면 "함수=곡선=변화=테일러 급수"라는 관념은, 19세기부터 서서히 흔들리기 시작한다.

10.2. 해석함수에 대한 의문


해석함수 공격에 첫 단추를 끼운 것은 의외로 푸리에 해석이었다. 조제프 푸리에가 파동을 연구하면서 나온 푸리에 급수(즉 사인/코사인 함수의 무한합)에서 푸리에는 처음으로 연속이 아닌 '식'을 찾아낸다. 지금으로 비스무레하게 말하면 사각파 이런 애들을 푸리에 급수로 나타낸 것이다. 해석적인 식은 어디에서건 연속이므로[23] 푸리에 급수는 오일러의 함수 범위에선 확실히 벗어난 셈이다. 대신에 푸리에는 모든 함수는 푸리에 급수로 나타낼 수 있다는, 즉 "함수=푸리에 급수"라는 더 급진적인 주장을 해버린다. 이 때문에 푸리에 급수가 항상 원래 함수로 수렴하는지의 문제가 수학자들의 떡밥으로 떠올랐다.
디리클레는 증명을 찾으려는 수많은 수학자들을 대신해 이 떡밥을 해결하며, 항상 그렇지는 않다는 결론을 내었다. 즉 푸리에 급수마저도 함수의 정의로서는 한계가 있다는 것을 지적한다. 여기에 덧붙여 그는 다음과 같이 정의되는 디리클레 함수를 제시한다.
$${\bold 1}_{\mathbb Q}(x)=\begin{cases} 1 & \text{if } x \in \mathbb{Q} \\ 0 & \text{if } x \notin \mathbb{Q} \end{cases}$$
해석학을 배운 사람이라면, 이 함수는 어디에서도 연속이 아니라는 것을 알 수 있을 것이다. 연속뿐만 아니라 모든 구간에서 리만 적분이 존재하지 않는다. 하지만 이 함수를 표현하는 다음과 같은 식이 존재한다(...)
$$\displaystyle {\bold 1}_{\mathbb Q}(x) = \lim_{n \rightarrow \infty} \left( \lim_{m \rightarrow \infty} \cos^{2n} \left(m! \pi x\right) \right)$$ (m, n은 자연수)
당시엔 엡실론-델타 판정법이 완벽하게 정립된 것은 아니었고 리만적분도 아직 정의되기 전이었지만, 그래도 이게 연속이 아니고 보통의 적분도 안되는 것 쯤은 알 수 있었다. 물론 저 극한 식은 그때에는 없었을 것이다. 디리클레는 더 나아가서 함수의 엄밀한 정의를 거의 내릴 뻔하지만, 아쉽게도 조각적인 연속함수의 개념에 그친다. 하지만 디리클레의 이 정의에는 "함수는 수학적 연산으로 나타날 필요가 없다"는 내용은 확실히 쓰여져 있다. 로바체프스키도 1834년 비슷한 서술을 한 바가 있어서[24] 디리클레와 로바체프스키를 사실상의 함수의 정의를 내린 사람들로 꼽는 사람이 많다.
근대 함수의 두 가지 요소인 '식'과 '연속' 중 '식'은 이렇게 날아갔지만, '연속'을 떼내는 데에는 시간이 조금 더 걸렸다. 다만 이것은 위의 디리클레 함수의 예시에서 보듯이, 불연속함수가 존재할 가능성을 생각을 못했다는 것보다는 이것을 함수로 인정해 줘야 하는지를 고민했던 것에 더 가까울 것이다. 이것은 코시의 뒤를 이어 바이어슈트라스극한의 완벽한 정의인 엡실론-델타 논법을 완성하면서, 즉 연속이 무엇인지 정확히 알게 됨으로서 해결되었다. 바이어슈트라스모든 점에서 연속이지만 미분불가능한 함수를 만들어낸 시점에는 일반적인 함수의 변화니 뭐니를 논하는 건 전혀 의미가 없다는 것을 다들 체감했을 것이다.

10.3. 함수의 정의 이후


19세기 말의 데데킨트 시점까지 가면 (집합론에서의 약간의 변경을 제외하면) 우리가 현대에 쓰는 함수의 정의가 완벽히 정립된 것으로 본다. 이렇게 이제까지의 불확실성을 모두 떨어내고 함수, 극한, 연속 등을 완벽히 정의한 미적분학은 이 정의들을 바탕으로 해석학이란 이름으로 다시 태어나게 된다.
어떻게 보면 함수의 정의는 극한, 연속, 미분 등의 다른 개념들의 정의와는 다른 방향으로 변화했는데, 다른 것들은 직관적으로 보이는 것들을 엄밀하게 정의해 복잡해진 느낌이 있지만 함수의 정의는 더욱 간소화되었다는 차이가 있다. 물론 정의는 간단할수록 좋지만, 어찌 보면 정의가 간단해진만큼 함수의 범위는 더욱 넓어져서 온갖 괴상한 함수들을 데리고 와야 한다는 뜻이다. 하지만 이 결정도 결국엔 맞는 것으로 드러난다. 해석학 중 미분방정식의 풀이법이 극도로 발전하면서 사람들은 개별 함수뿐만이 아니라 이들로 이루어진 벡터 공간인 함수 공간 위에서 해법을 찾는 방식을 생각했는데, 연속함수들만 모아 놓으니 뭔가 많이 부족했던 것. 완비성(completeness) 등의 좋은 성질을 갖는 공간을 찾으려면 연속함수들을 이용하기보다는 전체 함수들의 풀에서 특정 조건을 만족하는 것만 추려내는 것이 더 편했고, 이 방식은 함수해석학(functional analysis)의 시작이 된다.
한편 이렇게 간단해진 함수의 정의로 인해, 함수는 해석학 외의 다른 분야에서 '구조'를 정의하는 일을 맡을 수가 있었다. 사실상 군론의 시작을 연 대칭군(치환군)부터가 따지고 보면 함수들의 모임이고, 선형대수학에서 나오는 선형 변환을 생각하는 데에도 함수의 개념이 필요하다. 여기서 더 나아간 추상대수학을 배우면 초반에는 대수적 구조랑 함수놀이만 하고 있는 자신을 볼 수 있을 것이다. 위에서 단사/전사/전단사 등을 정의한 게 부르바키였다는 것을 보면 언뜻 눈치챘겠지만, 이 함수의 정의도 부르바키식 개편에 잘 들어맞아 채택된 느낌이 있다. 애초에 디리클레의 정의를 집합론적인 정의(1.1.3의 정의)로 엄밀하게 못박은 게 부르바키라, 저 함수의 정의를 디리클레-부르바키 정의라고 부르기도 하니까... 이 부르바키식 개편의 극단이 범주론이고, 그곳의 객체와 사상(morphism) 개념은 비록 함수에서 따왔지만 그걸 넘어선 어마어마한 무언가가 되어버린 것은 말할 필요도 없을 것이다. [25] 어느 분야이나 함수가 수학자들의 필수 도구가 되어 버린 것은 부정할 수 없다. 물론 함수 하면 떠올리는 것은 분야마다 천차만별일 것이다. 범주론이 아니더라도 실함수의 이미지가 희석된 경우에는 function 대신에 map, morphism 등의 용어도 자주 쓰인다. 한국어로 이들을 '함수'라 번역하는지 '사상'이라 번역하는지는 또 분야마다 제각각이다.
부르바키의 집합론적 정의가 1939년에 등장하기까지에는 또 의외로 길고 긴 우여곡절이 있지만, 모두 따라가자면 수리논리학과 공리적 집합론의 발전사와 엮여 이야기가 매우 길어진다. 재미있는 것은 2번 문단의 함수 내용도 이 과정에 나름의 빚을 지고 있다는 것인데, 힐베르트가 함수를 정의하려는 과정에서 나온 불완전성 정리, 정지 문제 등과 연관되어 알고리즘과 계산가능성 이론, 결국에는 튜링 머신까지 튀어나왔기 때문이다.

11. 프로그래밍에서의 함수


프로그래밍에서의 함수는 프로그램 소스 코드에서 일정한 동작을 수행하는 코드(들)[26]을 말한다. 이때 프로그램이 동작할 때 함수의 호출 과정은 다음과 같다.
  • 코드상에서 함수가 호출된다. 이때 변수를 넘겨주기도 하는데 이를 매개변수 또는 인수(parameter)라고 한다.
  • 호출된 함수의 코드가 동작한다.
  • 함수의 동작이 끝나면 함수를 종료하고 경우에 따라 반환값을 코드에 반환한다.
이 함수는 크게 내장 함수와 사용자 정의 함수로 나뉜다. 내장 함수는 프로그래밍 언어 차원에서 이미 정의되어 있는 함수로, 별도로 함수를 만들 필요 없이 형식에 맞춰 불러 쓰기만 하면 된다. 언어 레퍼런스를 보면 상당히 많은 내장 함수가 제공되는 것을 알 수 있다.
사용자 정의 함수는 프로그래머가 만들어 쓰는 함수로, 코드의 어딘가에 미리 정의해 둬야 불러쓸 수 있다.

11.1. 함수의 장점


함수를 이용하면 불필요하거나 여러 번 중복되는 코드를 함수를 호출하는 식으로 간단하게 정리할 수 있다. 또한 프로그램을 여러 함수로 분리하여 프로그래밍에서 더욱 쉬워지기 때문에 현재 대다수의 프로그래밍 언어는 함수를 지원한다.

11.2. 함수 호출 시 오버헤드


함수를 불러올 때, 호출 뒤 귀환할 주소와 현재의 상태를 담고 있는 각종 레지스터를 어딘가에 저장해야한다. 이런 정보들을 저장하는 장소를 보통 호출 스택(call stack) 또는 런 스택(run stack)이라고 한다. 함수를 콜 하기 전에 이런 정보를 저장하는 작업이 필요하므로 약간의 오버헤드가 생긴다. 따라서 프로그램의 속도를 골수로 뽑아내야 하는 시스템 프로그램에는 필요 이상의 함수 콜을 자제하고, 함수 스타일의 매크로를 많이 이용하곤 했다. 또한, 과거에는 컴파일을 하고도 그걸 도로 디스어셈블해서 코드를 손으로 최적화하는 삽질이 많았으나 대부분 옛날 얘기고, 요즘은 웬만한 함수 호출 부하따윈 씹어먹을 만큼 하드웨어가 발전했고, 정 부하가 될 만한 부분은 컴파일러가 자동으로 함수 호출 코드를 함수 내용으로 바꿔주는(인라이닝[27]) 등의 최적화 테크닉을 컴파일러가 자동으로 해주므로 함수를 멀리하고 매크로를 가까이 할 필요성은 사실상 사라졌다.
재귀함수를 짤 경우 호출 스택의 용량에는 한계가 있기 때문에 그 용량을 초과해서 재귀 호출하면 스택 오버플로우가 발생할 수 있다. 단 일반 함수와 달리 함수를 후 값을 반환하는 대신 주어진 환경에서 메모리 주소를 점프하며 함수만 갈아끼우는 꼬리재귀 최적화[28](Tail-call optimization)가 지원되는 컴파일러는 재귀 스타일로 짜더라도 스택 오버플로우를 방지할 수 있다. 물론 꼬리재귀 최적화가 가능하게 짜 줘야 한다[29]. 현재 주요 컴파일러(GCC, clang/llvm, vc)에는 모두 포함되어 있는 기능이다. 안습하게도 Java에선 지원하지 않는다. 대신 다른 JVM기반 언어인 Scala나 Clojure에선 각각 꼬리재귀 최적화 가능하게 코딩하면 컴파일 시 루프로 변환하거나 명시적으로 재귀시켜 컴파일 시 루프로 변환시킬 수 있다.

11.3. 수학 함수와의 관계


수학에서의 함수와 프로그래밍에서의 함수는 대동소이해 보이지만 크게 다르다. 특정한 값을 입력하여 특정한 값을 출력하는 메커니즘 자체는 같지만, 프로그래밍에서의 함수는 내적으로 그 입력값을 어떻게 다루어 출력값을 내는지도 보는 반면, 수학에서의 함수는 순수하게 입력값과 출력값만을 본다. 전자를 Intensionality 라 하고, 후자를 Extensionality 라 하는데[30], 이로 인해 깊은 부분에서 큰 차이가 발생하는 경우가 많다.
둘째로 정의역과 공역이 모든 집합이 다 허용되는 수학 함수와는 달리 프로그래밍에서는 이산적인 집합만 허용된다.[31] 이는 알고리듬적인 집합(recursively enumerable set)만 다룰 수 있는 컴퓨터 자료 구조의 한계, 나아가서는 알고리듬의 수학적 모델 자체의 한계로 인해 발생한 것.
또한 수학 함수와는 달리 하나에 입력에 여러 가지 출력이 대응되어도 상관없다. 사이드 이펙트가 없이 같은 입력에 대해서 항상 같은 결과를 되돌려주는 함수를 참조 투명(Referentially Transparent, 명사형은 Referential Transparency)하다고 하며, 이런 함수를 '순수 함수'라고 한다. 반대로 사이드 이펙트가 있으며, 같은 입력에 대해서 다른 결과가 나올 수도 있는 함수를 참조 불투명(Referentially Opaque, 명사형은 Referential Opacity)하다고 한다. '''난수'''가 참조 불투명한 함수의 가장 좋은 예이다.
여담이지만, 프로그래밍에서의 함수를 수학에서의 함수처럼 에뮬레이션하여(이 경우에도 Intensionality 와 알고리듬적인 자료구조만을 사용하는것은 동일하다. 사이드 이펙트만을 제한한 것.)와 프로그래밍 하는 순수 함수형 프로그래밍 언어 역시 존재한다.
대부분 전사나 단사를 따지지 않아도 되지만, 이걸 따져야 하는 경우도 있다. 튜링 테스트의 대표격인 CAPTCHA와, JPEG의 양자화(또는 계수화)에는 역함수가 존재하지 않기 때문에(단사가 아니기 때문에) 완벽하게 복원할 방법이 없으며, 이 때문에 아직 튜링 테스트를 통과한 기계가 없고, 앞으로도 당연히 없을 것이다. 비손실 압축과 양방향 암호 알고리즘은 해당 함수가 전단사여야만 유효하며,[32] 굳이 단사일 필요가 없는 단방향 암호 알고리즘마저도 단사가 아닌 경우(충돌)를 최소화해야 한다.

11.4. 호출 규약


상술한대로 함수를 호출할 때에는 함수의 인자(parameter)를 피호출자(callee)에게 전달할 필요가 있으며, 함수가 종료된 후에는 void(혹은 procedure)가 아닌 이상 리턴값을 받아올 방법이 있어야 한다. 컴파일러별로, 혹은 라이브러리를 만드는 회사별로 인자를 메모리에 적재하는 방식이 다르다면 일일히 맞추어 주거나 사용을 포기할 수밖에 없다. 이를 위해서 함수를 호출할 때 스택의 구조, 파라미터를 넘기는 방법, 리턴값을 전달하는 방법 등을 미리 통일해 두어야 한다. 이렇게 통일된 규칙을 호출 규약(Calling convention)이라 한다. 같은 운영체제라면 호출 규약이 통일되어 있다고 보아도 좋다. Python과 같은 언어에서 고속 처리를 위해 C 라이브러리를 불러서 사용할 수 있는 이유도 호출 규약대로 인자를 적재하고 call 명령을 내리면 바로 C로 작성된 함수가 호출되며 피호출자 안에서 호출자가 적재한 인자를 그대로 읽어올 수 있기 때문이다. 소스코드의 인터페이스가 아니라 이미 컴파일된 이진(Binary) 파일을 호출하는 인터페이스이기에 응용 프로그램 이진 인터페이스(Applicaiton Binary Interface = ABI)라고 부른다. 또한 스택 정리를 호출자가 하느냐 피호출자가 하는가, 함수 호출 전후로 보존되어야 하는 레지스터가 무엇무엇인가 등도 모두 호출 규약에 정의되어 있다. 스택 정리를 피호출자가 하면 X86에서는 retn(N)[33] 명령 하나로 스택 정리와 리턴을 동시에 수행할 수 있어서 조금 더 빠르고 편리하게 함수 호출에서 리턴할 수 있었다. 하지만 가변 인자(ex. ''printf'', ''scanf'' 등.)를 사용할 수 없어서 C에서는 호출자가 리턴 후 스택을 정리해준다. 가변 인자를 사용하면 피호출자는 인자의 개수를 알 방법이 없기 때문이다.
예) X86 CPU의 호출 규약
아키텍처
호출 규약 이름
레지스터 매개변수
스택의 매개변수 순서
스택 정리 주체
비고
IA-32(32비트 X86)
cdecl

RTL
호출자

stdcall

RTL
피호출자
[34]
fastcall
ECX, EDX
RTL
피호출자

thiscall
ECX
RTL
피호출자
[35]
X86-64
Microsoft X64
RCX, RDX, R8, R9
RTL
호출자
[36]
System V
RDI, RSI, RDX, RCX, R8, R9
RTL
호출자
[37]

12. 여담


함수는 자연현상의 인과관계를 설명할 때 적합하다. 모든 현상(X)은 반드시 그에 따른 결과(Y)가 발생한다. 계속 똑같은 원인이 생기면 당연히 결과도 똑같으며, 뜬금없이 전혀 다른 결과가 생기는 경우는 없다. 컵 속 물을 예로 들자면, 우리가 일상생활에서 -30도에서 200도(정의역)까지 물의 온도를 특정한 값(X)으로 균일하게 조절하면 물은 고체/액체/기체 상태(Y)가 된다. 여기서 생각을 '''단순하게''' 해보자. 고체도 액체도 기체도 아닌 다른 상태로 존재하는 것이 가능할까?뭐, 압력이 낮고 일정하다면 [-30, 200]에서는 일어나지 않는다. 이 부분에서 함수의 특징 중 하나인 '''모든 X는 반드시 그와 짝을 이루는 Y값이 있다'''라는 개념이 들어간다. 또 하나 생각해볼 게 있다. 과연 특정 온도의 물이 한 번에 두 가지 상태를 다 가지는 일이 있을 수 있을까? 상식적으로 생각해봐도 물은 액체이면 액체, 기체이면 기체여야 하며 액체이면서 기체인 경우는 말이 안 된다. 여기에 '''모든 X는 반드시 Y에 하나만 대응한다'''라는 개념이 포함되는 것이다.
물론 위의 문단은 예시일 뿐, 양자역학적 관점으로는 틀린 말이 된다. 불확정성 원리에 따르면 같은 사람이 던진 주사위라도 항상 같은 수가 나오지 않듯이 같은 조건(x)에서도 다른 결론(y)이 도출될 수 있다고 한다. 즉, '집합 $$X$$의 원소 하나에는 $$Y$$의 원소 하나만이 대응된다'라는 정의를 위반한 셈. 그리고 사실 액체이면서 기체, 기체이면서 액체인 경우는 존재하긴 한다. 일상생활에서는 보기 힘들 뿐, 애초에 함수 개념이 처음 제시된 때는 아직 양자역학이 들어서기 훨씬 전으로 한창 고전물리학이 태동하던 시기였단 걸 고려하자. 후술하겠지만 이러한 유형의 함수는 좀 더 넓은 의미의 함수와 관계되어 있다.
함수(函數)라는 어휘는 function의 음차로, 종종 초등/중등교육과정에서 함수는 입력값을 넣으면 입력값에 따르는 특정한 출력값이 나오는 '보이지 않는 마술상자'처럼 비유되는데, 유치해 보이는 이 관점이 외려 함수의 정의와 더욱 근접한다. 함수라는 단어는 函(상자)의 의미 또한 절묘하게 살린 번역이었다. 여담이지만 국어사전을 따른 '함수'의 표준발음법은 [함수]가 아니라 '''[함쑤]'''다. 꽤나 많은 사람들이 간과하고 있는 사실이었으나, 2017년 12월 3일부로 표준발음이 개정되어 [함수]라고 읽는 것도 허용했다.
[image]
이런 식으로 초등학교 때부터 규칙과 대응이라는 이름으로 함수를 배워왔다. 수식으로 표현하면, □ 을 $$x$$로, ? 를 $$y$$로 놓았을 때 $$y=x+4$$가 된다.
일본에서는 함수를 관수(関数)라고 부른다. 다만 이건 원래 일본어에서도 함수를 함수(函數)라고 썼었는데, 상용한자 체계를 도입하면서 函을 쓰지 않게 되고, 덕분에 같은 발음을 지닌 関数를 대신 사용하게 된 것일 뿐이다. 실제로 지금도 函数라는 표기법도 추천되지는 않지만 허용된다.
혼합 계산에서 함수의 연산 순서는 마지막이다. 즉 사칙연산에서 가장 나중에 계산하는 덧셈/뺄셈보다도 나중에 계산한다.

13. 관련 문서



[1] '선형함수'란 표현은 보통 선형 변환을 위해 남겨놓는 편이다.[2] 알파벳 f는 function(함수)의 첫글자에서 나왔다. 여러개의 함수를 나타낼 때에는 알파벳 나열하듯 $$f, g, h, \cdots$$등의 알파벳으로 함수를 나타낸다. 물론 $$a\left(x\right)$$라거나 $$a\left(b\right), x\left(f\right)$$ 등등의 형태도 함수기 때문에 낚이지 않게 주의하자. 심지어 원주율에 쓰이는 $$\pi$$나, 숫자인 1도 함수의 이름자로 쓰이면 각각 소수 계량 함수, 집합 판별 함수라는 완전히 다른 물건이 된다.[3] $$y$$가 유일하지 않을 경우 음함수가 되며, 엄밀히 말하면 함수가 아니다.[4] 오해하기 쉽지만 이 명제의 역#s-2.1인 '$$y \in Y$$에 대응하는 $$x \in X$$'는 '''유일하지 않아도 된다'''. 짝함수, 주기함수의 예만 봐도 알 수 있다.[5] 한쪽 끝이 막혀 있는 화살표($$\mapsto$$)는 집합 사이의 관계#s-2(사상)를 나타낸다.[6] 읽기 편하라고 에프엑스라고 부르지만 영어권에서는 "function of x", 짧게는 "f of x"로 읽는다. 즉 x의 function이라는 말 그대로의 의미. fx로는 읽지 않는다. 이런 것 비슷한 것 중에 지수함수 읽는 법이 있는데, $$a^x$$ 는 "a to the power of x", 줄여서 "a to the x" 라고 읽는다.[7] 데데킨트는 영문 위키피디아에 따르면 장 디외도네(Jean Dieudonné)가 데데킨트의 1888년 논평인 'Was sind und was sollen die Zahlen?'의 한 구절을 확인한 부분이 있다. 사실 대부분 디리클레/로바체프스키가 함수의 정의 고안자로 인정받지만, 이들이 각각 1834, 1837년에 한 서술이 정확한 '정의'의 공식화인지 여부는 논란이 있다.[8] 즉 실함수를 집어넣어서 실함수가 나오는 (추상적) 함수이다. 작용소(operator)라 부르는 이 개념은 미분방정식이나 푸리에 해석을 공부할 때 등장한다.[9] 전사와 전사함수라는 표현은 현제 교육과정에서 정식으로 배우지는 않지만, 문제에는 나오니 기억해두자. [10] 그래서 정의역과 $$P$$가 같다고 해도 공역이 다르면 엄밀히 말하자면 다른 함수인 것이다.[11] 3차원 이상에서는 좌표축의 이름에 따라 $$z$$절편, $$w$$절편, $$t$$절편 같은 것들도 있다.[12] 그래프가 주어졌을 때 함수가 아닌지 판단하는 방법은 정의역에 속하는 임의의 $$ x $$값에서$$ y $$축에 평행한 수직선이 그래프와 만나는 점이 한 개인지 확인만 해주면 된다.[13] 아까 원의 방정식은 그래프를 보기만 해도 함수가 아닌 것을 알 수 있다.[14] '선형함수'란 표현은 보통 선형 변환을 위해 남겨놓는 편이다.[15] 이 조건이 없는 경우 오일러 공식에 의해 '''삼각함수가 멱함수가 되는''' 해괴한 일이 벌어진다.[16] 보통 이때쯤 되면 출제되는 방정식 문제들의 실근의 절댓값이 10을 넘지 않는다는 등 요령만 잘 깨우치면 대입법으로도 3차 방정식을 어렵지 않게 풀 수 있다. 고등학교 1학년에서 출제되는 3차 방정식의 경우, 모든 항의 계수가 유리수이기 때문에, 적어도 한 개의 유리근이 나오므로 위 방법대로 1개의 근을 구하고, 나머지 두 근은 근의 공식으로 구하면 된다.[17] 이 역시 고등학교 1학년의 4차 방정식에도 적용 가능한 풀이법이며 이는 최소한 2개의 실근이 보장되며, 앞에서 말했듯이 모든 항의 계수가 유리수이고, 거기다가 극히 일부 문제를 제외한 모든 4차 방정식 문제가 난이도 조절 문제로 1로 고정되기 때문이다. [18] 모든 점에서 불연속이거나, 연속이지만 어디서든 미분이 불가능한 등[19] , 대신 ;를 쓰기도 한다.[20] $$\mathbb{R}^2\to\mathbb{C}$$:$$(a,b)\to a+bi$$
$$\mathbb{C}\to\mathbb{R}^2$$:$$z\in\mathbb{C}, f(z)=(\Re(z),\Im(z))\text{(}\Re(z), \Im(z)\in \mathbb{R}\text{)}$$
[21] 편각을 색도로 표현한 다색 복소평면을 쓰기도 한다. 이 경우 2차원상에서 표현이 가능하다.[22] 그래서 절댓값 함수의 도함수인 부호 함수는 $$x=0$$만 외딴 섬마냥 따로 떨어져 있다.[23] 테일러급수는 수렴반경 밖에서는 발산하기는 하지만, 불연속점이 나오는 경우는 없다.[24] 참고: 영문 위키피디아[25] 범주론에서의 사상의 정의역과 공역은 굳이 집합일 필요가 없는 임의의 오브젝트가 되기 때문에, 집합론에서의 집합과 함수로는 표현이 불가능한 정말 많은 것들의 표현이 가능해진다. [26] 보통은 코드가 여럿인 경우만 생각하지만, C언어의 매크로 함수나 인라인 함수, OOP의 접근자(accessor) 등의 경우 코드가 하나인 경우도 있다. 사실 실용성을 버린다면 void형으로 선언해서 안에 한 줄도 안 써놓아도 함수는 함수.[27] 언어에 따라 inline 키워드를 붙여 마음대로 인라인 할 수도 있다. 물론 재귀함수 같은 건 키워드 붙여도 안 된다.[28] "끝재귀 최적화"라고도 한다.[29] 함수 호출 후 아무것도 하지 않고 바로 그 값을 리턴할 때.[30] 집합론의 제일공리가 Extensionality 이다. [31] 이산확률분포의 확률질량함수를 떠올리면 된다.[32] 암호 알고리즘이 전단사가 아니라면 원하지 않는 개인키로 암호를 해독하는 등, 암호 체계 자체가 쓸모 없어진다.[33] 스택 포인터를 N 감소시키고 리턴한다[34] Windows에서 이 방식을 사용했으며 이 때문에 API로 프로그램을 작성할 때에는 int ''main''(...)이 아닌 int PASCAL ''WinMain''(...)으로 프로그램을 시작하였다[35] C++의 멤버 함수에서 사용하는 방법으로 ''this'' 포인터를 ECX 레지스터에 적재한 후 호출한다.[36] 마이크로소프트 Windows에서 사용하는 규약. 처음의 인자 네 개는 레지스터에, 그 이후 인자는 스택에 적재한다. C++에서 숨겨진 인자인 ''this'' 포인터는 첫번째 인자로 간주되어 RCX 레지스터로 넘어온다.[37] 리눅스, x86 솔라리스, BSD, OS X에서 사용하는 규약. 처음의 인자 여섯 개는 레지스터에, 그 이후 인자는 스택에 적재한다. C++에서 숨겨진 인자인 ''this'' 포인터는 명확한 규칙은 없으나 보통 RAX 레지스터로 넘어온다.