본문 바로가기

기타/객체지향의 탄생(2013)

객체지향의 탄생-진입장벽

 

  1. 객체지향의 진입장벽

2003년의 겨울은 추웠다. 날씨가 추웠고 돈이 없어 추웠고 미래가 불안해서 추웠다. 나는 옛날부터 프로그래밍을 좋아했다. 다만 바로 취직하기에는 실력이 부족했다. 5개월을 이곳 노동부지원 IT학원에 투자했다. 만약 여기를 수료해도 취직이 되지않는다면 답이 없다. 내가 그해 겨울에 추웠던 것은 미래가 불안했기 때문이다.

 

몇천원 붕어빵 간식과 중국집 사장님 양해를 구해 짬뽕국물만 시켜 소주 마셨던 그때는 돈도 유독 없었다. 다만 지금은 따르지 못한 것을 하나 가지고 있었었다. 열정이다. 그때의 열정은 지금은 따라잡기 힘든 절박함이 뒷받침된 강력한 힘을 가졌다.

 

우리는 프로그래밍의 기초인 처리, 판단, 반복에 대해 배우고 있다.

 

처리는 일반적인 변수 대입등의 처리문, 판단은 if문에 따른 분기처리, 반복은 for문을 통한 반복을 처리한다.

 

이 3가지를 바탕으로 기본적인 프로그래밍를 구현할 수 있다.

 

강사님이 반복 for문을 가르킬때 응용문제로 *별표를 이용해 삼각형이나 다이아몬드, 구구단을 만드는 문제를 냈다.

 

 

[다이아몬드, 구구단을 출력하는 문제는 for문을 돌려야 된다. 어렵다.]

 

이 문제가 처음 배우는 입문자 입장에서는 은근히 머리쓰고 생각해볼 문제이다. 이 시점이 프로그래밍 입문자들의 첫번째 장벽이다. 입문자들이 프로그래밍에 기본적인 소질이 있는지는 여기서 판가름 되었다. 이 장벽을 넘지 못하고 방황하기 시작한 동기들이 몇명 있었다. 입문자가 처음에 삼각형을 그리고 다이아몬드를 그리고 구구단을 그리면 프로그래밍에 대해 기본적인 소양을 갖고 있다고 볼수 있다.

 

얼마뒤 우리는 자바를 시작했다. 자바하면 뒤따르는 객체지향에 대해 배우기 시작했다. 상속에 대해 배우고 폴리모피즘에대해 배웠다. 우리는, 나는 무슨 얘기를 하는지 이해가 되지 않았다. 뭔가 심오한 한차원 넘는 레벨의 이야기를 하는것 같았다. 강사님은 여러 비유를 써가며 쉽게 설명하려고 애를 쓴다. 그래도 이해가 되지 않았다.

 

객체지향이 두번째 장벽이었다. 객체지향을 이해하는 동기들은 아무도 없는것 같았다. 객체지향을 몰라도 프로그램은 짤수 있고 결과물은 돌아가기 때문에 나와 동기들은 객체지향을 뒤로 하고 다음 진도를 나갔다.

 

얘기하면 자랑이 되서 민망하지만, 나는 5개월뒤 학원을 수료할때 여러과정 합쳐 1명에게만 주는 우등상을 받았다. 그래서 생각해 본다면 1등인 나도 객체지향을 제대로 이해하지 못했으니 객체지향의 장벽이 입문자에게 얼마나 높은지 알수 있을 것이다.

 

객체지향은 개념 자체가 어렵거나 또는 설명이 어렵기 때문인지 객체지향을 배우는 장벽이 깍아지른 절벽을 보는것 처럼 높았다.

 

[처리,판단,반복의 프로그래밍 기초의 장벽을 넘으면 객체지향이라는 넘기 힘든 장벽이 존재한다.]

 

  1. 진입장벽이 높다는

무언가를 배울때 진입장벽이 높다는 것은 두가지 경우가 있다. 하나는, 배우고자 하는 대상이 조잡하여 배우는 진입장벽도 높고 배운 결과물도 안 좋은 경우이다.

 

영업력 90 기술력 10프로로 계약을 성사, 어이없게도 SI할때 완성된 솔루션을 공급하는게 아니라 SI할 때 같이 개발을 시작하고 SI 개발자들을 베타테스터로 만드는 엉터리 솔루션을 만드는 업체들의 제품이 여기에 해당한다.

처음부터 조잡하게 설계되어 사용법도 조잡한 경우로 마치 짝퉁 제품들과 같다.

 

하나는, 배우고자 하는 대상이 고도의 지식과 노하우가 쌓인 고급 지식이라 배우는 진입장벽이 높고 진입장벽을 넘으면 배움의 혜택을 보는 경우이다.

 

자동차 운전면허와 비행기 조종면허의 차이점의 예를 들 수 있다. 자동차 운전면허는 보통 사람이 적당한 이론과 실기를 배우면 대부분 합격한다. 기술이라기 보다는 기능에 가까운것이 운전이다.

 

비행기 조종은 고도의 조종 기술을 익힌다. 보통 사람을 뛰어넘는 신체 능력, 항공 지식, 조종 실력이 있어야 비행기 조종 면허를 취득한다. 만약 비행기 조종을 익히는데 하나라도 부족한 능력이 있으면 탈락한다.

 

대신 힘들게 비행기 조종 면허를 취득하면 그 만큼의 혜택을 본다. 자동차 운전자 보다 월등히 빠르게 먼길을 이동한다. 자동차 운전자 보다 월등히 많은 월급을 받는다.

 

객체지향도 마찬가지이다. 객체지향이 진입장벽이 높은 것은높은 수준의 지식과 노하우가 쌓인 고도의 사고력을 요구하기 때문에 진입장벽이 높다.

 

대신 객체지향의 진입장벽을 넘으면 보통 주변에서 보는 손 가는대로 하나의 클래스에 덕지 덕지 전역 변수 선언하고 if 문 for문 남발하는 개발자와는 달리 유연하고 확장성이 좋은, 높은 품질의 개발을 할 수 있고 설계와도 관련 있어, 다른 개발 기법과 비교할 때 더 좋은 소프트웨어를 설계할 수 있다.

 

  1. 객체지향은 낯설다

객체지향 개발은 낯설다. 객체지향 개발은 세상을 분석하고 개발하는 방법론이라고 말한다. 그러므로 프로그래머로 객체지향 개발을 하는것이나, 저 자동차가 폼나보이는구나 또는 내 옷깃을 아슬하게 스쳐지나가는 아가씨가 예쁘구나~ 하며 일반 사람으로 세상을 관찰하는 것이나 결국은 하나라서, 객체지향 개발은 어렵지 않아야 한다.

 

그러나 객체지향 개발은 어렵다. 사실은 이런 이론과 현실 사이의 괴리감도 우리 세상에 존재하는 일이기 때문에 당연한 현상이긴 하지만, 우리 프로그래머는 괴리감을 이겨내고서라도 객체지향 개발로 먹고 살아야 하기 때문에 고약한 일이 되었다.

 

지금에 와서 뒤돌아볼때 내가 객체지향 개발을 어려워했던 것은, 객체지향 프로그래밍과 내가 세상을 관찰하는 모습이 같다는 생각을 하지 못했기 때문이었다. 어려운 공식들로 가득찬 수학 교과서나 한문이 깨알같이 적힌 법전의 문장들처럼 객체지향도 어렵기만한 기술이라는 두려움을 가졌다..

 

객체지향 프로그래밍과 내가 세상을 관찰하는 모습이 같다는 것을 저절로 깨닫게 하기 위해, 나는 객체지향이 어렵게 느껴지는 이유를 좀더 자세하게 찾고 해결해야 했다. 내가 객체지향을 어려워했던 이유를 자유롭게 꺼내 보았다.

 

객체지향과 관련된 용어가 어렵게 느껴진다. 처음 구조적 프로그래밍에 익숙한 상태에서 다른 관점의 사고를 요구하는 객체지향으로의 전환이 어렵게 느껴진다. 이것은 마치 어렸을때 시골에서 저절로 배운 수영을 이제와 정통 수영 영법으로 교정하자니 힘든 상황과 마찬가지이다. 객체지향의 근본이 되는 사고 능력인 관찰과 추상화 능력이 본래 이해하기 쉬운 사고능력은 아니다. 객체지향 관련 용어와 다른 용어와의 공통점과 차이점을 명쾌하게 해설하는 선생님과 책이 드물었다. 등의 이유들로 기억된다.

 

이 이유들을 생각하고 해결점을 찾는 방법으로 앞으로 글을 전개한다.

 

[객체지향의 탈을 쓴 누더기 소스에서 벗어나 제대로된 객체지향 결과물을 만들고 싶다.]


덧 ) 이 객체지향의 탄생 원고는 제가 책으로 내려다가 일단 잘 안되었는데요. 이유는 비문이 많다. 단락내 주제가 중복된다. 어떤 상황 설명을 과장한다.등 입니다. 그래도 원고를 일단 블로그에 몽땅 풀어보고 언젠가 제대로 교정해서 다시 도전할 생각입니다. 비문이 많다. 단락내 주제가 중복된다. 어떤 상황 설명을 과장한다. 이점을 감안해서 읽고 객체지향을 이해하는데 도움이 되셨으면 좋겠습니다. 의견도 주셨으면 좋겠습니다. 원고 조금만 교정하면 괜찮을것 같은 출판사 관계자분의 피드백도 환영합니다. 특별한 일 없으면 매주 월수 발행 예정입니다.