개인적으로 프로그래밍의 객체지향적 사고는 수학에서 왔다고 생각하는 일인으로 최근 화이트헤드의 '수학이란 무엇인가'라는 책을 읽다 그가 수학의 추상성을 설명하는 부분에서 객체지향의 철학과 일맥상통한 설명을 하는 것을 보고 너무 기뻤다.
수학은 개체적 사물은 물론이고 그 사물에 귀속된 성질이나 개념들에도 적용될 수 있는데, 그 근거는 성질, 개념 등도 (수학자의 입장에서) 여하한의 구체적 감각이나 감정과 상관없이 무차별적으로 개체화할 수 있는, 넓은 의미의 사물들이기 때문이다. (중략)
비단 수학자의 입장일 뿐일까? 앞의 문단은 C++이나 JAVA 같은 프로그래밍 책의 객체지향 파트에서 나왔다고 해도 너무 자연스럽다.
우리는 주변에서 일어나는 구체적 사실들에 대한 지식을 감각을 통해 일차적으로 획득한다. (중략) 그러나 이런 정보들은 개인적인 지각일 뿐이다. 나의 치통은 너의 치통일 수 없고, 내가 본 그림은 네가 본 그림일 수 없다. 그래서 우리는 이렇게 지각한 내용의 원천을 외형적 세계를 형성하는 사물들 간의 관계로 돌린다. 즉 치과의사는 치통을 뽑는 것이 아니라 충치를 뽑는 것이다. 뿐만 아니라 여기서 한 걸음 더 나아가면 우리는 사람들의 모든 지각 밑바탕에서 사물들이 서로 연결된, 단일한 집합체로서의 세계를 애써 상정한다. (중략) 그래서 우리는 특정 감각 또는 특정인의 지각에서 벗어나, 전혀 독립적인 방식으로 외적 존재들 간의 관계를 기술하기를 원한다. 당연히 그런 외적 존재들의 세계 속에서 발생한 사건에 적용 가능한 법칙은, 가치중립적이고 만유 보편적인 방식으로 기술되어야 한다.
이 문단은 왜 수학에서 저러한 추상성이 중요했는지 설명하는 부분이다. 개인의 주관적인 경험이나 느낌이 아닌 누구나 공감하고 이해할 수 있는, 누구에게나 적용되는 세상의 기본적인 법칙들을 찾기 위해서는 결국 주관적인 부분을 객관화시켜 나타내야 하는 작업이 필요한데 이를 주관적 느낌마저도 각각의 개체(객체)들의 관계로서 표현함으로써 해결한 것이다.
객체지향 프로그래밍 역시 이와 마찬가지라 생각한다. 만약 프로그래밍을 아주 구체적인 몇 가지 상황만을 고려하여 코딩한다면 빈번히 발생하는 작은 예외에서도 이 프로그램을 에러를 발생시킬 것이다. 하지만 이렇게 최대한 보편적인 방식으로 짠다면 훨씬 많은 예외를 수용할 수 있는 더 좋은 프로그램이 될 것이다. 물론 객체지향의 장점, 혹은 역할은 이것만이 아니다. 객체지향 개념은 정확히 이해하기 어려운 만큼이나 풍부한 철학과 장점을 가지고 있다. 수학의 추상성과 객체지향 프로그래밍을 서로 비교해서 공부하여 보면은 서로를 더 잘 이해할 수 있을 것이라 생각한다.
한 가지만 더! 수학은 자연에 내재되어 있는, 말하자면 신이 만들어 놓은 보편적인 법칙을 찾기 위해 구체적인 경험에서 점점 추상화시켜 들어가는 작업이라면 프로그램은 거꾸로 프로그래머가 그 만의 세상을 합리적으로 잘 만들기 위해 가장 (상위의) 추상적인 아이디어에서 시작하여 이를 점점 구체화시키는 작업이지 않을까?