더북(TheBook)

3.1.3 부분 함수 다루기

함수가 되려면 대응 관계가 다음 두 가지 조건을 만족해야 한다.

1. 정의역의 모든 원소에 대해 함수가 정의되어야 한다.

2. 정의역의 모든 원소는 반드시 공역의 한 값에만 대응해야 한다.

 

정의역의 모든 원소에 대해 정의되어 있지는 않지만 나머지 요구 조건을 만족하는 대응 관계를 부분 함수(partial function)라고 부른다. 그리고 부분 함수가 아닌 함수를 전함수(total function)라고 부르긴 하지만 굳이 그렇게 부를 필요는 없다. 엄밀히 말해 진짜 함수는 언제나 전함수이며, 부분 함수는 함수가 아니다. 하지만 많은 프로그래머가 사용하는 용어이므로 알아두는 편이 좋다.

predecessor(x)라는 대응 관계는 N(0과 양의 정수로 이뤄진 집합)상의 부분 함수이다. 하지만 이 함수는 N*(0이 없이 양의 정수로만 이뤄진 집합)이 정의역이고 N이 공역인 경우 전함수이다. 프로그래밍에서는 부분 함수가 중요하다. 왜냐하면 부분 함수를 전함수로 다뤄서 생기는 버그가 많기 때문이다. 예를 들어, f(x) = 1 / x는 0에서는 값이 정의되지 않기 때문에 N에서 Q(유리수)로 가는 부분 함수다. 하지만 이 함수는 N*에서 Q로 가는 경우에는 전함수이고, N에서 Q에 오류를 추가한 집합으로 가는 함수일 경우에도 전함수이다. 공역에 원소(오류라는 값)를 추가하면 부분 함수를 전함수로 바꿀 수 있다. 하지만 이렇게 하려면 함수가 오류를 반환할 수 있어야 한다. 이와 비슷한 경우를 컴퓨터 프로그램에서 찾아볼 수 있겠는가? 이 책의 뒷부분에서는 안전한 프로그래밍 기법의 일부분으로 부분 함수를 전함수로 바꾸는 방법을 살펴본다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.