14. 같은 구조라는 생각
화이트보드에 조직도를 그린다. 옆 칸에는 대학교 전공 선수과목 체계도를 그린다. 두 그림에서 이름을 모두 지우고 동그라미와 화살표만 남긴다. 조직도 쪽에는 동그라미 네 개가 있다. 하나가 다른 하나를 향해 화살표를 뻗고, 그 화살표를 받은 동그라미와 또 다른 동그라미가 함께 나머지 하나를 향해 화살표를 뻗는다. 선수과목 체계도 쪽에도 동그라미 네 개가 있다. 한 과목이 다른 한 과목의 선수과목이 되고, 그 과목과 또 다른 과목을 함께 들어야만 마지막 과목을 들을 수 있다. 두 그림을 나란히 놓고 보면 화살표의 배치가 정확히 겹친다. 조직도의 동그라미 하나하나를 선수과목 체계도의 동그라미 하나하나에 짝지어 보면, 한쪽에 화살표가 있는 자리마다 다른 쪽에도 예외 없이 화살표가 있다.
이 우연한 일치를 그냥 우연이라고 넘기기에는 뭔가 걸리는 구석이 있다. 조직도와 선수과목 체계도는 재료도 다르고 가리키는 현실도 완전히 다르다. 보고 관계와 과목 이수 순서는 아무 상관이 없다. 그런데도 둘 사이에 이런 식으로 딱 들어맞는 대응이 존재한다는 사실 자체는, 단순히 두 그림이 비슷해 보인다는 인상 이상의 무언가를 말해 준다. 한쪽 그림에서 참인 관계가 다른 쪽 그림에서도 예외 없이 참이 된다는 것이다.
이 대응을 조금 더 엄격하게 정리하면 조건은 두 가지로 줄어든다. 첫째, 점과 점을 하나씩 빠짐없이 짝지을 수 있어야 한다. 둘째, 그 대응을 따라갔을 때 화살표의 연결 관계가 정확히 일치해야 한다. 화살표가 있는 곳은 그대로 남고, 없는 곳 역시 그대로 없어야 한다. 이 두 조건을 만족하는 대응에 수학자들은 동형사상이라는 이름을 붙여 두었다. 동형이라는 말은 겉모습이 닮았다는 뜻이 아니라, 화살표의 그물이 한 치의 어긋남도 없이 서로를 재현한다는 뜻이다.
이 개념은 프로그래밍에서도 낯설지 않은 자리에 등장한다. 스택을 배열로 구현할 수도 있고 연결 리스트로 구현할 수도 있다. 내부적으로 배열은 인덱스를 옮기며 값을 채우고, 연결 리스트는 새 노드를 만들어 앞쪽에 매단다. 완전히 다른 재료로 지어졌지만, push를 부르면 원소 하나가 위에 올라가고 pop을 부르면 방금 올라간 원소가 그대로 내려온다는 관계는 두 구현에서 조금도 다르지 않다. 같은 원소를 같은 순서로 담고 있는 배열과 연결 리스트를 서로 대응시켜 보면, 한쪽에서 push로 이어지는 화살표는 다른 쪽에서도 push로 이어지는 화살표와 정확히 포개진다. 두 구현은 재질만 다를 뿐 같은 그물을 그리고 있다.
여기서 13장의 관찰이 한 걸음 더 나아간다. 대상의 재질이 상관없다는 이야기는 이미 나왔다. 이번에 드러나는 것은, 서로 다른 재질로 지어진 두 그물 전체를 놓고도 같다 혹은 다르다를 판정할 수 있는 기준이 존재한다는 사실이다. 그 기준은 점 하나하나의 정체가 아니라 점과 점 사이의 대응이 화살표를 남김없이 보존하는가에 있다. 조직도와 선수과목 체계도, 배열 스택과 연결 리스트 스택은 서로 완전히 다른 이야기를 하고 있지만, 화살표의 그물만 놓고 보면 같은 그림을 두 번 그린 것에 지나지 않는다.
물론 모든 대응이 이렇게 완벽하게 양방향으로 맞아떨어지지는 않는다. 화살표를 한쪽 방향으로는 빠짐없이 옮길 수 있어도 반대 방향으로는 되짚어지지 않는 대응도 있다. 동형은 그중에서도 가장 엄격한 경우, 양쪽이 서로를 완전히 되비추는 경우다.
결국 동형이라는 말은 두 그물이 같은 구조를 가진다는 선언이 아니다. 화살표의 관계만 놓고 보면 두 대상을 같은 것으로 취급해도 된다는 기준이다. 1장에서 던졌던 질문, 무엇이 무엇이 똑같을까라는 물음은 이렇게 한 바퀴를 돌아 다시 제자리로 온다. 젓가락 두 짝을 같다고 부르던 감각과 조직도와 선수과목 체계도를 같다고 부르는 감각은, 결국 서로 다른 크기의 문제에서 같은 질문을 반복하고 있을 뿐이다.
그렇다면 구조를 옮긴다는 것은 정확히 무엇을 옮긴다는 뜻일까.