05. 다섯 번째 수업: 상자 속의 상자, 합성함수 (Composite Functions)

현대의 거대한 소프트웨어 코딩이나 공장 시스템은 절대로 자판기 상자 딱 한 개로 돌아가지 않습니다. A 공장에서 자동차 쇠 파이프 뼈대 모델을 용접해 찍어내면, 그 결과물 고철 뼈대를 그대로 B 공장 페인트 도색 라인 파이프 입구에 다시 욱여넣어서 색깔 결과물을 만들어내고, 마지막으로 C 공장 입구에 연속으로 쑤셔 넣어 타이어가 달린 최종 완성작 자동차를 배출해 내는 컨베이어 벨트 연속 조립 라인(Pipeline).

수학의 함수 머신들을 여러 개 파이프로 줄줄이 연결해, 앞에 놈이 뱉은 동전($Y$) 을 뒤에 놈의 입력($X$) 으로 집어삼키게 끔 직렬연결해 버린 연쇄 괴물! 우리는 이것을 합성함수(Composite Function) 라고 부릅니다.


1. 합성의 기호: 동그란 연결 파이프 $\circ$

$f$ 라는 뼈대 조립 기계가 있고, $g$ 라는 빨간 페인트 도색 머신이 있습니다. 어떤 재료 $x$ 를 가져와서 뼈대 기계($f$) 에 먼저 넣고 가공품을 뽑은 뒤에, 그 뜨끈뜨끈한 결과물을 연달아 도색 머신($g$) 입구에 바로 차에 넣어버리겠다는 무식한 컨베이어 벨트 코드를 수학 기호로 쓰면 이렇게 됩니다.

\(g( f(x) )\) (f 기계가 돌아가서 뱉어낸 $f(x)$ 덩어리 자체를, 바깥 통기계 g 의 $X$ 투입구 뱃속에 통째로 삼키게 만들었다는 시각적 공포의 기호입니다.)

서양에서는 이 연속 파이프라인 느낌을 강조하기 위해 동그란 연결 파이프 기호 $\circ$ 를 써서 훨씬 예쁘게 렌더링 세팅합니다. \((g \circ f)(x)\) (주의: 화살표는 $X$ 에서 시작해 오른쪽으로 흘러가지만, 함수 수식을 읽을 때는 껍데기를 감싸는 순서 때문에 오른쪽 $f$ 머신에서 $\rightarrow$ 왼쪽 $g$ 머신 방향 껍데기로 진행을 역으로 읽어야 합니다!)

2. 순서가 바뀌면 자동차가 터진다 (교환 법칙 성립 불가)

프로그래머들이 합성함수 연속 호출 코드 machine_A(machine_B(data)) 를 짤 때 가장 빈번하게 치는 치명적 사고(에러)가 뭘까요? “어차피 기계 두 개 연속 통과하는 거니까 순서는 내 맘대로 앞뒤로 바꿔 넣어도 똑같은 결괏값이 나오겠지?” 하는 어리석은 착각입니다.

방금 전 자동차 공장을 떠올려 볼까요.

  1. $g(f(x))$ 정상 라인: 쇠 뼈대 조립 기계($f$) 통과 후 $\rightarrow$ 페인트 도색 머신($g$) 에 넣음 = [성공] 빨간 스포츠카 완성!
  2. $f(g(x))$ 멍청 라인: 그냥 아무 철광석 흙덩이를 페인트 도색 머신($g$) 에 먼저 부어버림 (빨간 흙덩이 생성) $\rightarrow$ 그 질척이는 도색 된 흙덩이를 쇠 뼈대 용접 기계($f$) 에 부어버림 = [대참사] 기계 고장 폭발 및 쓰레기 결과물 배출!

수학적으로도 똑같습니다. 함수끼리 파이프를 합성할 때는, 앞뒤 자리를 바꿔치기하는 교환 법칙 ($f \circ g == g \circ f$) 이 절대로 절대 네버 성립하지 않는 극도의 순서 편향(Strict Order) 의 법칙을 따른다는 점을 잊어서는 안 됩니다.

3. 모방은 창조의 어머니 (재귀와 프랙탈)

나라는 함수 $f(x)$ 입구에 다른 기계 결과가 아니라 나 자신의 배설 결과물을 쑤셔 넣으면 어떻게 될까요? 즉 $f( f(x) )$ 처럼, 내가 만든 결과 카드를 다시 내 머리 인풋으로 집어넣고 끊임없이 무한 루프 뱀의 꼬리 먹기를 시전 하는 것입니다!

이 무한한 자가 합성 루프 덩어리 코드를 바로 컴퓨터 프로그래밍 세계에서 그 유명한 “재귀 함수 (Recursive Function)” 라고 부릅니다. 이 재귀 합성이 시각적인 우주 좌표 기하학에 스며들면, 확대해도 확대해도 자신의 미친 반복 패턴이 무한히 쪼개지며 나타나는 놀라운 마법, “프랙탈 (Fractal)” 예술 이 탄생하게 됩니다. 함수의 세계는 이다지도 끝이 없습니다.

서브목차