공룡호가 사는 세상 이야기

본제: 객체지향의 철학

[객체지향이란 무엇인가?]

객체지향 프로그래밍이란 말 그대로 '객체를 지향한다', 즉, 객체를 지향하는 스타일(Style)로 프로그램을 작성하는 것을 말한다.
여기서 '지향' 이란 것에 주목할 필요가 있다. '지향' 이란 말의 의미는 무엇인가? 지향은 '방향을 가리킨다' 라는 뜻인데, 이 글의 제목에서 '철학' 이란 말을 쓴 것도 지금 자세히 이야기 하려는 것과 깊은 관련이 있다. '철학' 이란 '생각하는 길' 을 의미하는데, 생각하는 길이라고 하는것은 어떤 실체적인 것을 의미하는것이 아닌, 그 사람의 논리적이고 합리적인 사고방식을 말하는 것이다.
그렇다면 다시 '객체지향의 철학' 은 무엇인가에 대해서 생각해 보면, 그것은 '객체를 방향으로 하여 생각하는 길' 이 되며, 단순하게 요약한다면 '객체중심으로 생각하기' 를 의미한다.
자, 이제 일차적인 결론이 나왔다. '객체지향' 이라고 하는것은 하나의 생각일 뿐이며 이것은 비관념적인 어떤것에도 종속되지 않는다. 생각은 완전한 관념의 세계인데, 이것을 외부로 표현하는 것이 흔히 말하는 '객체지향 프로그래밍' 이라고 하는것이다.

일반적으로 'OOP(Object Oriented Programming) 언어를 사용하는 것=OOP 를 하는것' 이라는 통념이 있는데, 이는 잘못된 생각이다. 그렇지만 대부분의 사람들은 'OOP 언어를 사용하는것=OOP 를 하는것(OOP 언어를 사용하는것->OOP 를 하는것, OOP 언어를 사용하는것<-OOP 를 하는것)' 이 옳지 않음을 알고 있는 경우가 많다. 그렇지만, 약간 다른 말로 'OOP 언어를 사용하지 않는것=OOP 를 하지 않는 것(OOP 언어를 사용하지 않는것->OOP 를 하지 않는 것, OOP 언어를 사용하지 않는것<-OOP 를 하지 않는 것)' 이라고 하였을 때, 이것이 틀리다는 것을 알고있는 사람은 그리 많지 않다. 잘 살펴보면 두개의 명제들은 각각 명제의 대우로 쌍을 이루고 있음을 알 수 있다. 즉, 그 명제는 자동적으로 옳지않은 명제가 되는것이다.
C 언어를 하더라도 객체지향을 한다고 할 수 있다. 'OOP 를 하지 않는것<-OOP 언어를 사용하지 않는것' 이 아니기 때문이다.

물론 여기서 언어가 사람에게 주는 영향을 완전히 무시한다는 것은 아니다. 두개의 것에 대해 '언어->사람' 인지 '사람->언어' 인지, 영향의 선후관계는 명확하지 않지만, 두 가지가 밀접한 관계를 가지고 있음은 누구도 부인할 수 없는 사실이다. 그러한 것에 입각하여 OOP 언어는 사용자의 사고방식을 객체지향이 아닌 언어보다 더 객체지향적으로 사고하게끔 해 준다.
C 를 할때 객체지향적인 생각을 하지 않는것은 아니지만, 그것을 표현하기 위해서 그것을 '표현하는 구조적 방법' 에 대해서 생각해야 하고, 그것이 그리 쉬운일이 아니라는 것은 누구나 알고있는 사실이다.
그러한 것에 대해서 C++ 는 C 보다 더 적합한 솔루션이 될 수 있다. 긍극적으로 C++ 는 C 에서 Object Oriented 적인 표현을 생각하지 않아도 된다는 표면적인 효과가 존재하고, 그것을 사용하는 사람의 사고를 더욱 '객체지향화' 해 준다는 내면적인 효과가 존재한다. (언어를 사용하는 사람은 그 언어와 직,간접적 영향을 주고 받는다는 것을 전제로 함)