OOP, 디자인 패턴, 리팩토링...
다소 지겹다면 지겨운 주제일 수도 있다.
하지만, 나의 경우에는,
오랫동안 강의를 하고, 공부를 해오면서도
아직도 무엇인가 부족하다는 느낌이다.
그런데, 놀랍게도,
OOP, 디자인 패턴, 리패토링 그까짓것 이라고 생각하는 개발자들을 간혹 만나게 된다.
물론, 우리는 표현의 차이에서 서로를 오해할 수 있는 빌미를 제공하고 있다.
하지만, 필요 이상으로 OOP 등의 필요성을 낮게 평가하는 경우가 종종 있는 듯 하다.
무엇인가에 익숙해지기 시작하면, 대상을 잘안다고 바로 착각하기 쉽다.
부부나 친구의 관계도 그러하다.
가장 어렵고 힘든 이야기는 가족과 친구에게 하기 힘들다.
어찌보면 가장 가까운 이가 가장 멀리 떨어져 있는 존재일 수도 있다.
*****************************************************
어떤 이가 친구 앞에서 음악을 연주하고 난 후,
"이 곡이 어떤가?"
"그 곡의 의미를 가르켜줄 수 없나?"
그러자 그는 다시 한 번 연주를 처음부터 되풀이 한 후,
"이게 바로 이곡의 의미야!"
*****************************************************
대상을 이해한다는 것은 시간이 필요하다.
그저 무의미한 시간일지라도 숙성에 도움이 된다.
********************************************************************************
"우린 우리가 길들이는 것만을 알 수 있는 거란다" 여우가 말했다.
"사람들은 이제 아무 것도 알 시간이 없어졌어.
그들은 상점에서 이미 만들어져 있는 것들을 사거든.
그런데 친구를 파는 상점은 없으니까 사람들은 이제 친구가 없는 거지.
친구를 가지고 싶다면 나를 길들여줘"
"그럼 어떻게 해야 하는거지?" 어린 왕자가 물었다.
"참을성이 있어야 해" 여우가 대답했다.
"우선 내게서 좀 떨어져서 이렇게 풀 숲에 앉아 있어.
난 너를 곁눈질해 볼꺼야. 넌 아무 말도 하지 말아.
말은 오해의 근원이지. 날마다 넌 조금씩 더 가까이 다가앉을 수 있게 될꺼야....."
다음날 어린 왕자는 그리로 갔다.
"언제나 같은 시각에 오는 게 더 좋을 꺼야" 여우가 말했다.
"이를 테면, 네가 오후 네 시에 온다면 난 세시부터 행복해지겠지.
네 시에는 흥분해서 안절부절 못할 꺼야.
그래서 행복이 얼마나 값진 것인가 알게 되겠지!"
********************************************************************************
그저 피상적인 앎의 시작도 "아는 것"에 포함시킬 수 있다고 하자,
그렇지만 여전히 "아는 것"과 "할 줄 아는 것"에는 커다란 차이가 있다.
누구나 배트를 휘둘러 공을 쳐내는 "이론" 자체는 쉽게 이해할 수 있지만,
실재로 멋지게 공을 쳐내기 위해서는 수없이 헛 방망이질을 해야 하는 것처럼...
스스로 코딩에 적용해보고,
이미 적용한 것은 다시 살펴보고,
다시 부족한 이론을 찾아 공부하고,
그러한 과정을 수없이 반복하지 않는 한,
진정한 이해도 진정한 성장도 있을 수가 없다.
그리고, 스스로가 성장하지 못한 채 경력만을 쌓으며 타성에 젖게 되면,
모든 것이 다 허망하고 쓸 때 없어 보이는 것이 당연하다.
미꾸라지는 바가지 정도의 물만으로도 헤엄치기에 부족함이 없다고 한다.
마치 산에 오를 때,
그 높이에 따라 보이는 정도가 다르듯이,
자신의 능력에 따라, 모든 것의 의미가 달라진다.
어쩌면 오해의 근원은
OOP의 진정한 힘이 규모가 크고 복잡한 프로젝트에서 발휘되기 때문일지도 모른다.
소규모 작은 프로그램에서는 막코딩이 휠씬 위력적일 경우가 많다.
아직 OOP의 위력이 발휘될만한 프로젝트를 경험하지 못한 경우에,
아마도 무용론에 가까운 주장을 할 수 있지 않을 까 하는 생각이다.
시간에 쫓기기 때문에 제대로 할 여유가 없기 때문이라는 변명도 있을 수 있다.
상당히 현실적이며, 80% 공감한다.
하지만, 제대로 하지 못하기 때문에 쫓기는 경우가 더 많다고 생각한다.
그리고, 현실적이고 객관적인 80%의 실패자의 뒤를 쫓을 이유가 있을까?
*****************************************************
미국 어느 기관에서 조사한 결과,
프로젝트의 27% 정도를 제외한 모든 프로젝트는 실패였다고 한다.
27% 중에서도 만족스럽지 못한 프로젝트가 많았다.
*****************************************************
정석은 정석일 뿐이고, 이론은 이론일 뿐이다.
아는 것은 시작일 뿐이다.
중요한 것은 스스로 반복하여 제대로 이해하고, 활용할 수 있는 수준을 이끌어내는 것이다.
그리고, OOP, 디자인 패턴, 리패토링을 이론으로만 바라보는 사람은
그것들의 진면모를 10%도 보지 못한 경우라고 할 수 있다.
진정한 완성은 실전 중에 무의식적으로 코드로 표현될 수 있어야 한다.
완벽한 수준을 위해서가 아니라,
조금씩이라도 성장하기 위해서 노력해야한다.
그러한 면에서 진정한 완성은 존재하지 않을 수도 있겠지만...
|
대부분의 OOP를 논하는 단행본들이나 류종택님이 말하는 'OOP의 필요성'에 대한 글들을 보면... 음... 뭐랄까... 홍보효과가 떨어진다고 생각합니다.
예를 들면 이런겁니다.
류종택님의 어느 글(책인가? --a )에서 보면 'OOP의 최대의 작업은 분업화이다'라는 내용을 본 적이 있습니다.
물론 OOP를 잘하면 막강한 분업화를 할 수 있지요. 아주 좋은 표현입니다.
제가 주장하는 OOP의 가장 큰 장점은 '워드프로세서, 컴파일러, 문자인식등 하이테크니컬한 기술을 구현하는데 용이하다'입니다.
분명히 류종택님의 표현과 저의 표현은 둘 다 OOP의 장점임에는 틀림없는데.. 그것을 듣는 사람의 입장에서는 분업화는 OOP가 아니어도 당장 팀원들과 할 수 있는 일인데... 제가 말한 것들은 기존에는 자신이 구현하지 못하던건데.. OOP를 하면 마치 쉽게 할 수 있다는 것처럼 느껴지고... 자신이 못하는 것을 할 수 있게 만드니 대단하게 느껴질 수 있습니다.
물론 둘 중에 정말로 어떤 것이 더 장점이냐...하는 문제는 지극히 주관적인 문제입니다. 이미 워드프로세서는 만들 줄 아는 사람이 혼자서는 잘하는데 팀작업을 잘못한다..라고하면 그 사람에게는 분업화가 더 중요하겠고 팀작업은 좀 하는데 워드프로세서를 못만드는 사람에게는 하이테크닉이 더 중요하겠지요...
OOP, 디자인 패턴, 리패토링를 그까짓거라고 생각하는 사람은...
그것을 적용하기 위한 노력 대비 결과물에 대한 효율이 만족스럽지 못하기 때문일 것입니다.
그 결과물이 실제로 결과물로써의 실체가 아닌 '분업화'와 같은 '방법론'이라면 개발자 개인으로써는 그다지 대단한 결과물이라고는 생각하지 않을 것이고 워드프로세서, 컴파일러, 문자인식과 같은 실체를 만들어 내는 것이라면 대단한 결과물이라고 느껴질 수 있는거지요. 비록 지금 당장 자신에게 필요한 것은 하이테크닉이 아니라 팀내에서의 분업화가 절실하다고 할지라도 개발자는 팀원이기 이전에 개인이기 때문에 자신에게 유익한 것에 더 관심을 갖는 경향이 있습니다.
그런면에서 OOP를 교육하는 입장에서는 많은 장점 중에서 어떤 점을 부각시키느냐는 대단히 중요한 문제라고 생각하며.. 그까짓거라고 생각하는 사람은 진짜 OOP 장점들을 제대로 알고 있지 못할 확률이 매우 높습니다.
물론 장점만 부각시키고 방법을 제대로 교육시키지 못하면 안되겠지만 서두에 말한것처럼 필요성을 논하는 것과 방법을 논하는 것은 별개라고 봐야합니다.
지금까지 류종택님이 진행해온 내용들은 대부분 방법을 많이 논하고 있습니다.
제가 지금까지 했던 세미나등은 OOP의 방법을 논하고 있는 것처럼 보이지만 사실은 OOP의 장점을 부각시키고 있었지요.
2~3시간동안 날코딩으로 간단한 워드프로세서를 만들어 본다거나...
원격제어를 개발함에 있어서 키보드데이터 화면데이터등 여러 종류의 데이터를 한 포트로 처리하면서 여러 포트를 쓰는 것과 같이 개발하는 방법.
신텍스 파서 기반 계산기를 만들어 보기.
등등..
이런 종류의 세미나들은 실제로 그 방법을 알려주기 위한것이 목적이 아니라 OOP를 잘하면 2~3시간 만에 간단한 워드프로세서도 만들 수 있다... 포트 하나로 여러 종류의 데이터를 따로따로 처리할 수 있다... 델파이같은 언어를 처리할 수 있는 신텍스 파서도 간단하게 된다...등등 OOP의 장점을 자랑하는게 주 목적이었지요...(하지만 그걸 보고도 정작 방법은 잘 생각이 안난다는...넘 후다닥해버려서....머.. 그게 목적이 아니었으니깐...)
그렇기 때문에 류종택님을 비롯해서 많은 OOP를 교육하는 사람들은 그까짓거..라는 말을 듣게 되는 것 같습니다.
일단은 그 사람의 기를 확 죽이고 시작해야하는데...
기를 죽이기에는 표현 방법이 좀 약했다고 할 수 있다는거지요...
결국 제 말의 결론은..
'그리고, OOP, 디자인 패턴, 리패토링을 이론으로만 바라보는 사람은
그것들의 진면모를 10%도 보지 못한 경우라고 할 수 있다.'
라고 한 류종택님의 결론의 원인이 OOP의 장점을 팀작업, 대규모에서의 효율등과 같은 방법론에 치중해 있기 때문이고 결과물이나 개발자의 스킬업에 대한 부분과 같이 개발자들이 '혹'할만한 부분에 대한 강조가 부족하기때문이다..라는 것입니다.
그래서 제 생각에는 저의 방법과 류종택님의 방법은.. 결국은 통합되어져야한다는 생각입니다.
자랑만해서도 안되고 방법만 알려줘도 안되고... 둘이 적절히 융합되어져야 될 것 같다고 생각은하는데...
일단 지금은 열심히 일을해야 할 때인듯.... ^^;
(아씨.. 결론 참 더럽네... ^^; )