📖 구조 노트 목차 Chapter 2 읽는 중

2. 기준이 같음을 만든다

구조 노트 Chapter 2 2026. 07. 10.

편의점에서 아르바이트를 하던 시절, 손님이 만원짜리 지폐를 내밀면 지폐의 일련번호를 확인한 적은 한 번도 없다. 그 종이가 어제 은행에서 막 나온 빳빳한 신권인지, 누군가의 지갑 속에서 반년을 접혀 있던 낡은 지폐인지도 상관없었다. 계산대는 오직 액면가 만원이라는 사실 하나만을 받아들였다. 물리적으로는 완전히 다른 두 장의 종잇조각이 거래 안에서는 교환 가능한 것으로 취급된다.

이 교환 가능성이 우리가 무언가를 같다고 부를 때 실제로 확인하고 있는 조건 아닐까. 젓가락 두 짝을 같다고 부르는 이유도 나뭇결이나 무게가 아니라 둘 다 같은 기능을 수행하기 때문이다. 프로그램에서 변수 a와 b가 같다고 판정되는 이유도 메모리 주소가 아니라 그 안에 담긴 값이 같기 때문이다. 지폐는 액면가가 기준이고, 젓가락은 쓰임새가 기준이고, 변수는 저장된 값이 기준이다. 기준이 되는 대상은 매번 다르지만, 그 기준 하나만 같으면 나머지 차이는 통째로 무시해 버린다는 점은 똑같다.

그렇다면 이 무시의 규칙에도 어떤 공통된 형식이 있지 않을까. 수학자들은 이 직관을 오래전에 정리해 두었다. 동치관계라 불리는 이 규칙은 세 가지 조건만 만족하면 어떤 대상이든 같음의 그물로 묶을 수 있다고 말한다. 첫째, 모든 대상은 자기 자신과 같다. 둘째, A가 B와 같으면 B도 A와 같다. 셋째, A가 B와 같고 B가 C와 같으면 A도 C와 같다. 이 세 조건이 만족되는 순간, 대상들은 자연스럽게 여러 묶음으로 나뉜다.

시계를 보면 이 쪼개짐이 눈에 보인다. 오전 아홉 시와 오후 아홉 시는 하루라는 축에서 보면 분명히 다른 시각이다. 하지만 시계 문자판 위에서는 똑같이 숫자 9를 가리킨다. 12시간을 주기로 세는 순간, 서로 다른 시각들이 하나의 자리로 겹쳐진다. 이것이 모듈러 연산이 하는 일이다. 무한히 이어지는 시간의 줄을 12칸짜리 원 위에 감아올려서, 원래는 전혀 다른 두 순간을 같은 자리로 포개어 버린다. 결국 무엇을 기준으로 감아올리느냐에 따라 같음의 그물망 자체가 달라진다.

여기서 젓가락과 지폐와 시계를 나란히 놓고 보면 처음 질문의 답이 조금 더 또렷해진다. 같음은 대상이 원래 가지고 있던 속성이 아니라, 우리가 어떤 축을 기준으로 세계를 나누기로 정했는가의 결과다. 그 축을 정하는 기준은 우리가 중요하다고 선택한 속성이다. 많은 경우 그것은 쓸모다. 지금 이 거래에서 무엇이 중요한지, 지금 이 계산에서 무엇을 남기고 무엇을 버릴지를 정하는 순간 같음의 경계선이 그어진다. 차이를 무시하는 행위는 게으름이 아니라 지금 필요한 만큼만 세계를 압축해서 다루려는 선택에 가깝다.

프로그래밍 언어를 설계하는 사람들도 결국 이 선택을 코드 안에 못박아야 하는 사람들이다. 어떤 언어는 값이 같으면 같다고 하고, 어떤 언어는 메모리 주소까지 같아야 같다고 한다. 어떤 언어는 두 가지 질문을 아예 따로 열어 두어 프로그래머가 그때그때 기준을 고르게 한다. 그렇다면 이 언어들은 같음의 기준을 정확히 어떤 방식으로 코드에 새겨 넣었을까. 다음 화에서는 그 구체적인 장치들을 하나씩 열어 본다.