OOP(객체지향)를 공부하며.


사용자 삽입 이미지


“어쩌지.. 나 oop의 매력에 빠져버렸어..”
라고 생각했던 오늘 아침이다.
uml설계나 rational rose니 design pattern이니, 살짝살짝 공부해 봤었는데 영…. 이해하기가 뭐이리 힘든거냐!!
사실 설계의 중요성은 자바 인트라넷을 작업하면서 깊게 느꼇던 것인데, 이부분에 종점을 찍어준 것은 “조엘온 소프트웨어”에서 기능명세서 부분을 보고 나서이다.
내 머리는 어케된건지 언제나 구조체+main함수였다. 콘솔 프로그래밍의 폐헤가 바로 이런 것인가.. 머리가 완전 구조화로 변해버린것이다!!

내가 맹근 클래스들은 protected따위는 없었다.(개념을 모르니깐..) virtual은 써본적도 없다. 상속? 할줄만 알지 정통으로 써본적은 없다. STL은 뭔말이냐?…
그저 뭐.. java는 죄다 클래스 개념이니깐 간단한 클래스만 짜집기 해서 맨날 맹근다는 것이 그게 그거였고, 내가 만든 소스코드는 모듈화가 전혀 되어있지 않았다. 설계도 엉망, 헤더와 소스의 독립화는 전혀 실행되지 않았고.. 클래스들은 완전 복잡하게 죄다 꼬여있고..

이런 개념을 잡아준게 바로 effective c++이라는 책이다. 4일째 새벽에 4시간식 투자해서 보고 있는데 솔직히 내가 모르는 개념들이 너무 많다. 아니 개념이라기보다는 그냥 문법이다. const? friend? explicit? 뭐냐 이게…
그래서 그나마 집에 있는 c++ prime(정말 두꺼움..) 옆에 두고 완전 초보 프로그래머 시절로 돌아가서 차근 차근 보고서 하나 하나씩 이해해 나가고 있다.

친구가 하나 하나 코딩하면서 이해해 보라는데, 우째, 주의해야 할 항목 55개가 있는데 한 5번까지만 코딩해보고 나서는 그냥 읽고 있다. 와… 완전 심오하게 빠져들어버렸다. 솔직히 개념적으로만 된 항목도 많고, 당최 어떻게 코딩을 해봐야 하는가!! 라는 것도 많아서 이다.
(대두 물론 나중에 코딩해 보겠삼;; 우선 쭉 읽으려고 .. ㅎㅎ)

객체지향의 신비.. 요즘은 세상이 너무 좋아져서 c#이나 자바는 메모리 누수는 크게 걱정 안해도 알아서 해준다.(물론 지금 내 지식 선에서는 이렇게 보고 있다.) 그런데 c++은 이런 세세한 항목까지도 신경써야 하고, 컴파일러 별로 생성자, 소멸자는 물론 new, delete, 포인터 등등.. 리턴할때 어떤걸 리턴하면 안된다니.. 등등을 아주 세심히 고려해야지 비로서 c++의 기능을 100% 써먹을 수 있고, 이게 습관으로 고정된다면 메모리 누수니 여러모로 신경써서 개발되온 c#이나 자바 등을 제대로 사용할 수 있는 것이라고 생각한다.

이제 항목 31번을 보고 있다. 스마트 포인터 등등.. 너무나도 새로운 것이 많다. 그마만큼 나는 미쳐들고 있다. 오늘도 새벽에 5시간동안 이 책과 샤프 하나만 들고 계속 보고 있었다. oop가 이렇게 신기한 것일줄이야.. 그야말로 사람의 두뇌 모듈을 만드는 것과 같은 착각을 불러 일으키고 있다.

객체지향 프로그래밍, 얼마나 완벽한 개념이었겠으면 c#이니 자바니 죄다 이개념으로 사용하고 있겠는가,
하물며 이 책에서는 설계부분에서도 고려하고 주의해야 할 점을 명확히 설계해 주고 있다. 특히 세계적인 c++권위자인 스콧 마이어가 쓴 책이라 더욱 더 신뢰가 간다.
설계 부분에서 특히나 기억에 남는 것은… “항목 19: 클래스 설계는 타입 설계와 똑같이 취급하자.”에서 깊은 인상을 받았다. c++에서는 이러한 형의 완벽함을 위해서 operator니, 생성/소멸자니.. 를 연구했겠는가.

책에 자세한 내용은 강컴을 참조하는 게 좋을 것 같다. 아직 뭐 나는 초짜에다가 절반밖에 보지 않았으니.. 크게 언급할 코멘트는 없다. 다만, 정독을 완료하고 나서는 한번쯤 내가 인상깊었던 것들을 정리해서 올릴 필요는 있을 것 같다.

Effective C++이 Effective think 로 변하는 그날까지!! 화팅!