본문 바로가기

기타/객체지향 토막글

객체지향과 절차지향, 수필 객체지향

세상의 모든 사물을 프로그래밍으로 표현하면 속성과 행동이라는 두가지 요소로 나누어서 표현된다. 세상의 모든 사물을 오직 두가지 요소로 나누어 표현해도 된다는 사실은 마치 0과1의 2진법처럼 명쾌하고 간결하게 느껴진다. 절차지향이던 객체지향이던 프로그래밍 대상의 구성 요소는 오직 속성과 행동으로 간결하게 구분지어 개발할수 있다는 사실을 생각해보니, 우리가 절차지향이나 객체지향을 너무 복잡하고 어렵게 생각하고 있는 것 같았다.

세상의 모든 사물을 속성과 행동으로 나누는 것은 절차지향과 객체지향 언어에서 나눈다. 좀더 명확하게 단어까지 고쳐 말하면, 속성과 행동은 절차지향에서는 데이터와 함수이고 객체지향에서는 속성과 메소드로 불린다.


절차지향은 농민들이 공동으로 농장을 경영하는 것과 같다. 무질서하고 원시적인 농사 방법에서 공동 농장으로의 진화에는 공동 농장 설계자들의 다음의 발견이 토대가 되었다. 모든 농사는 처리, 판단, 반복의 제어구조 만으로도 경작 프로세스가 가능하다는 것이었다. 이 농장 설계법을 보고 받은 당시 임금은 ‘절차지향 경작법’ 을 발표하고 대대적인 개혁을 시작했다.

공동 농장인 절차지향 경작지의 책임자들은 농민들의 업무부담을 철저하게 한 다음 일을 배분했다. 농민A그룹이 땅을 갈면 농민 B그룹이 씨를 뿌렸다(처리). 만약 경작해야할 땅이 또 있으면(판단), 방금 전의 작업을 (반복)하였다. 이 작업을 몇번 반복하다가 씨뿌리기 작업이 완성되면 농민A,B그룹은 잠시 쉬고 농민C그룹이 땅을 예쁘게 정리했다. 다음 농민D그룹이 씨앗에 물을 뿌린다. 만약 땅이 또 있으면, 방금 전의 작업을 반복하였다.

절차지향 경작지 안의 모든 농민들은 경작지 안의 모든 작물을 알고 공동으로 관리하였다. 공동으로 농장을 경영한 결과 경영 총책임자는 농민을 상대로 체계적인 업무분담이 가능했다. 경작 절차도 낭비 없이 효과적으로 진행되었다. 절차지향 경작지를 경영하는 책임자는 모든 경작 프로세스가 자기 계획대로 깔끔하게 정리되어 있었기 때문에 효과적인 통제가 가능했다. 부농이 되는 길은 멀지 않아 보였다.

절차지향 경작지의 책임자는 경작지를 확대했다. 경작지가 많아져 농민의 숫자도 늘어났다. 책임자는 늘상 하던대로 모든 작물을 모든 농민들이 알고, 각각의 임무대로 처리, 판단, 반복의 절차를 수행하도록 명령했다. 그런데 처음에는 잘될것 같았던 경작 프로세스에 문제가 생겼다.

절차지향 경작지가 워낙 넓어지다보니 수많은 작물을 통합하여 관리하기 어려워졌다. 매번 엄청난 분량의 작물의 성장과정을 체크하느라 책임자와 농민들은 서서히 지쳐가고 있었다. 농민들은 나라가 시키는 땅에서 시키는 일만 하고, 다른 농민과 관계를 맺을 기회가 없다 보니 숙련된 기술을 다른 농민에게 전수할 기회도 없었다.

여기저기서 많은 농민을 급조하다보니 미숙한 농민이 작물을 망치는 경우도 발생했다. 슬슬 절차지향 경작지가 삐긋거리자 농장에 불만을 품은 농민들도 생겨났다. 그들은 일부러 작물을 망치기도 했다. 결국 비극이 발생했다. 씨앗에 물을 주는 일을 수행하는 농민D그룹이 일부러 씨앗에 독극물을 뿌린것이다. 농민D그룹은 ‘모든 작물’에 물을 공급하는 일을 수행하였다. 그래서 모든 작물이 독극물을 먹고 죽어버렸다. 절차지향 경작지는 순식간에 폐허로 변했다. 화를 달랠길이 없었던 책임자는 농민D그룹 함수를 삭제해버렸다. 그리고 책임자 자신도 삭제당했다.


객체지향은 농민들이 자신 소유의 땅으로 농장을 경영하는 것과 같다. 절차지향 경작지의 교훈을 거울삼아 나라의 대신들은 새로운 경작 방법을 연구하기 시작했다. 세상과 인간의 이치를 연구한 대신들은 사람이 한꺼번에 수많은 작물을 대충 관리하기 보다는 책임질수 있는 범위의 작물만 관리하는것이 더 효과적이라는 것을 발견했다. 또한 작물의 이익을 농민에게 나눠줄 경우 더욱 더 책임감을 가지고 자신의 일을 제일 잘할 것이라는 심리학적인 연구도 진행했다.

대신들은 농민들이 자신 소유의 땅으로 농장을 경영하는 새로운 경작방법 연구 결과를 임금에게 보고 했다. 임금은 ‘객체지향 경작법’ 을 공포하고 시행에 옮겼다.

농민들에게 일정분량의 경작지 소유가 허용되었다. 농민들은 자신의 땅에 자신이 제일 잘 키울 수 있는 작물에 책임감을 가지고 정성을 다해 작물을 키우기 시작했다. 농민들은 그들끼리 관계도 형성하기 시작했다. 동료의 경작지를 도와주고 동료의 작물을 가져다 쓰기도 하고, 자신의 작물을 제공해주기도 했고, 서로 좋은 기술도 주고 받았다. 농민들이 자식을 낳고 자식이 일할 나이가 되자 자신의 경작 기술을 전수해주기도 했다. 농민들과 자식간의 자연스러운 관계가 형성되었고 자유롭게 메시지가 오고 갔다.

대신 농민들을 관리하는 책임자는 농민들에게 그들이 제일 잘 키울수 있는 작물을 안내해줄 필요가 있었다. 농민들끼리 효과적인 관계를 형성하고 협동하여 더욱 더 경작지를 잘 키울 필요가 있었다. 또한 농민들의 작물을 잘 정리하고 가공하여 나라에 바치는 임무도 수행했다. 농민들끼리나 농민과 자식간에 경작 기술을 잘 전파하여 그들의 기술이 발전된 방향으로 재사용되게끔 유도하는 임무도 수행했다. 어느 책임자는 이런 임무를 잘 수행하여 토지는 비옥하고 농민도 잘 먹고 책임자도 잘 먹고 나라도 잘사는 유토피아를 건설하였다.

그러나 다른 책임자는 이런 깊이있는 생각이 요구되는 임무를 하려고 들지 않았다. 어느 농민에게는 능력을 넘어서는 수많은 작물을 책임지라고 요구하고 어느 농민은 쥐꼬리만한 땅만 주었다. 농민들끼리의 관계를 따져보지도 않고 서로 싫어하는 농민들끼리 협동해서 일하라며 억지로 관계를 맺기도 했다. 심지어는 농민 주제에 왜 땅을 내 주고 스스로 일하게 하냐며 투덜거렸다. 땅은 모조리 내꺼라고 하면서 절차지향 경작지처럼 농민을 수동적으로 다루기도 했다.


절차지향 경작법은 여전히 좋은 방법이다. 하지만 속성을 전역변수로 관리하기 때문에  대규모 프로젝트에서 어느 행동이 폭탄을 터트릴지도 모른다. 또한 라이브러리로 함수를 재사용할수 있더라도 객체지향 경작법 만큼 재사용 절차가 간편하진 않다.

객체지향 경작법은 좋은 방법이다. 속성과 행동을 묶어 하나의 객체가 책임지고 관리한다. 객체가 소중한 속성을 보호하기 때문에 속성을 안전하게 관리할 수 있다. 또한 재사용을 간단한 문법으로 써먹을 수 있다. 그러나 객체지향 경작법을 잘 쓰기는 쉽지 않다. 객체지향 경작법의 특성과 효과를 잘 연구한다음 시행해야 한다.

객체지향 경작법은 좀더 진화해야 한다. 객체지향 경작법 자체의 진화 보다는 객체지향 경작법을 사용하는 책임자들의 역량이 진화해야 한다.


산골이 덧) 이 글은 수필 객체지향이라는 책쓰기용 원고의 일부라서 펌은 불허합니다. 일단 온라인 감수 받으려 하는 것이니 혹시 못써도 이해해주시고요. 지금 올리는 것은 공부한것을 독자와 공유하고 객체지향 개발자님의 조언을 받기 위해서입니다. 혹시 내공이 부족해서 미흡한 내용이 있을것 같습니다. 그래서 혹시 시간되시면 조언 부탁드립니다. ^ ^; 그리고.. 이 글 같은 경우 농장에 비유해서 절차지향과 객체지향을 설명 했는데요. 나중에 책에다가 농민은 함수 또는 메소드고, 작물은 속성이고, 농민이 자신의 땅에 가장 잘 키울수 있는 작물을 키우는것은 SRP(Single Responsibility Principle) 법칙의 비유이며, 농민D그룹이 일부러 씨앗에 독극물을 뿌린것은 농민D함수가 전역변수에 심각한 버그를 일으킨 것이다~등의 주석을 달아야 될까요?  ^ ^