모든 역사가 그러하듯, 정/반/합 이라는 과정을 통해서 진화하기 마련이다. 프로그래밍도 동일하게 기존의 단점을 보완하는 노력들을 통해서 진화해 왔다.
하지만, 절차지향 프로그래밍에서 객체지향으로 진화한지는 너무나 오래 되었다. "객체지향 다음은 무엇일까?" 라는 고민을 오래 전부터 해왔지만, 아직까지는 잘 모르겠다.
아마도, 객체지향의 태생이 그만큼 완전하기 때문은 아닐까? 마치 창세기의 인간창조(창 1:27, 하나님이 자기 형상 곧 하나님의 형상대로 사람을 창조하시되 남자와 여자를 창조하시고)의 신비와 같은 이유로 말이다.
프로그래밍을 처음 배우던 시절에 객체지향 프로그래밍(Object Oriented Programing)에 대해서 배우면서 이런 이야기를 들었던 기억이 난다.
"실세계(Real world)의 문제를 가장 빠르게 분석하고 대응하려다 보니, 객체(Object)라는 개념을 도입하여 종(Class)으로 표현하게 되었다."
프로그래밍을 업으로 삼은지 20년이 넘어선 이 시점에도, 놀랍다고 밖에는 표현할 수 밖에 없는 최고의 시도이자 개념이다.
객체지향에서 중요한 내용은 모든 대상(Object)을 Class로 바라보는 것이다. Class의 기본 요소는 속성과 메소드이다. 속성은 사람의 키, 몸무게, 성품 등을 의미한다고 할 수 있다. 메소드는 행동으로 걷기, 달리기, 식사하기 등을 의미한다.
사람(or 조직)을 1차적으로 평가할 때는 주로 속성(키, 몸무게, 재력 등)으로 판단한다. 그리고, 2차적으로 사람(or 조직)에 대해서 가치를 논할 때에는 주로 메소드(역할, 행동, 활동에 따른 산출물 등)으로 평가한다. 1차적인 평가는 현재 상태를 비교/판단하기 위해 필요하고, 2차적인 평가는 현재와 향후에 기대하는 영향력을 평가하기 위해 필요하다.
이런 배경 속에서, 오늘 아침 매우 중요한 질문이 떠올랐다.
사람(or 조직)을 바라볼 때, Class로 바라보아야 하는가? Function으로 바라보아야 하는가?
사실 많은 경우에 사람들을 평가할 때, 역할과 행동이 중요하다고 여기며 관찰/판단을 한다. 함께 일하거나 생활하기 위해서는, 산출물에 대한 기대치를 제대로 충족해 주는 것이 중요하기 때문이다. 결과보고서를 제출해 달라고 했는데, 기획서를 가져오면 서로 당황할 수 밖에 없으니까.
그렇다 보니, 계속 산출물이 기대치를 맞추지 못하는 상황이 발생하면 결국 포기하게 된다. 사람이든 관계든... 슬픈 현실이다.
이런 현실을 극복할 방안은 과연 무엇일까?
개인적인 생각은 사람을 산출물을 제공하는 기능요소(Function)으로 바라보지 말자는 것이다. 언제든 성장할 수 있는 속성과 메소드들을 지닌 하나님을 닮은 창조물(Class)로 대해야 한다는 것이다.
프로그래밍에서 Function은 그저 동일한 산출물을 제공하는 기능일 뿐이다. 산출물을 내는 속도나 품질(정확도)이 다를 뿐이지, 산출물을 낸다는 것 이상은 기대할 수 없는 개념이다.
Class는 매우 다르다. 속성과 메소드들을 다양하게 보유할 수 있고, 이들 보유 내용의 상호연결을 통해 다양한 확장성(새로움 속성/메소드의 추가를 포함하여)을 보여준다. 끊임없이 진화/발전하는 모습을 보이는 것이다.
사람을 바라볼 때, 단순한 기능만을 관찰하고 평가하려 하지 말고, 끊임없는 진화/발전의 모습을 기대하며 대하는 것이다.
물론, 이 글을 쓰고있는 이 시점의 나에게도 넘기 어려운 장벽임을 안다. 하지만, 진정으로 슬픈 현실을 벗어나려면 이 방법이 최선이 아닐까 한다.
언젠가 이 어려운 장벽을 넘어서는 나를 꿈꾸며, 오늘도 나 자신부터 Class로 바라보자~!!