기술적으로 바라본 진화
많은 사람은 진화를 적자생존이라는 말로 배워. 막연히 다윈주의나 경쟁을 떠올리지. 하지만 객체 지향의 관점은 과정을 더 정확히 보여 줘. 진화는 상속과 재정의가 선택 압력에 따라 걸러지는 과정이야.
실제로는 다음과 같이 작동해.
- 상속. 자식 생물은 부모에게서 클래스 정의에 해당하는 게놈을 물려받아. 부모와 거의 같은 모습이지.
- 변이(재정의). 복사하는 동안 점 변이, 삽입, 삭제, 중복 같은 무작위 변화가 일어나. 각각은 물려받은 코드를 조금씩 재정의해. 대부분은 중립적이고 일부는 해로우며 아주 적은 수만 이로워.
- 선택. 어떤 생물은 번식할 만큼 오래 살아남고 어떤 생물은 그러지 못해. 재정의된 특질이 생존과 번식을 도우면 다음 세대로 전달되고, 해롭다면 전달되지 않아.
- 반복. 수백만 세대에 걸쳐 이로운 재정의가 쌓이고 클래스 정의가 조금씩 달라져. 마침내 후손은 새로운 종이라고 부를 만큼 조상과 달라져.
객체 지향 프로그래밍의 상속과 재정의가 정확히 같은 모습이야. 다만 재정의된 코드의 생존 여부를 단위 시험이 아니라 현실이 판정해. 선택 압력은 우주에서 가장 가혹한 품질 검사야.
공유하는 기반 클래스는 여전히 남아 있어
우리는 척추동물 → 포유류 → 영장류 → 호미닌 → 호모 사피엔스로 이어지는 긴 기반 클래스의 사슬에서 특질을 물려받았어. 조상들이 남긴 재정의 대부분은 지금도 코드 바탕에 남아 있지. 원래 하던 일을 더는 하지 않는 기반 클래스의 흔적도 몸에 지니고 있어.
- 소름. 털이 있던 조상이 몸을 더 크게 보이게 할 때 유용했어. 지우지 않은 채 물려받은 재정의야.
- 사랑니. 이제는 먹지 않는 옛 식단에 맞았던 어금니야.
- 맹장. 초식을 하던 조상에게서 물려받았어.
- 꼬리뼈. 꼬리가 있던 시절에 그것을 붙잡아 주던 자리야.
이런 흔적은 종이라는 클래스에서 주석 처리된 메서드와 같아. 원본에는 아직 남아 있지만 더는 호출되지 않는 거지.
어떤 종은 왜 빨리 변하고 어떤 종은 천천히 변할까
선택 압력이 리팩터링의 속도를 정해. 박테리아는 빠르게 변이하고 개체 수도 엄청나게 많아서 빨리 리팩터링돼. 그래서 항생제 내성도 몇 달 안에 진화할 수 있어. 고래는 개체 수가 적고 번식도 느려서 클래스 정의가 천천히 달라지지. 같은 시간 동안 더 많이 번식하고 더 강한 선택 압력을 받을수록 리팩터링도 빨라진다는 모습은 어디에서나 같아.
진화는 정해진 목적지를 향한 진보가 아니야. 수십억 년 동안 상속하고, 변이하고, 선택하는 순환이 이어졌을 뿐이야. 그 순환에서 살아남은 모습이 오늘 남아 있는 모습이지. 인간을 포함한 모든 현생 종은 첫 세포까지 이어지는 끊어지지 않은 상속의 사슬에서 지금도 작동하는 재정의야.