객체지향의 사실과 오해: 역할, 책임, 협력 관점에서 본 객체지향 Books

어느 날 갓 대학에 입학한 친척 동생으로부터 중간고사를 대비한 공부 중 모르는 부분이 있다면서 연락이 왔다.

"형, 객체가 뭐죠? 객체와 인스턴스의 차이는 뭔가요?"

황당하고 부끄럽게도 나는 바로 답변을 해주지 못했다. 길지 않지는 하나 컴퓨터는 최소 20년, 프로그래밍은 대충 10년은 넘게 해왔는데 어째서 답변을 해주지 못했을까? 
학부 때는 C++언어를 C언어처럼 가르쳐주었기 때문에, 그리고 지금 내 전공 덕분에 객체지향 프로그래밍(OOP)은 하지 않고 C언어와 어셈블리만 만지고 있기 때문에라는 변명은 내가 생각해도 구차했다.

어찌되었든 당시 친척 동생은 급했을테니, 내가 알고 있는 조금의 지식과 급히 구글을 통해 조사한 결과를 알려주었고, 결과적으로 그 동생은 중간고사를 망했다.


이런 사연이 있기에 이 책을 처음 발견했을 때(아마도 이글루스 밸리 어디에서인가 발견했다) 망설이지 않고 구매했다. 일단 제목으로부터 봐도 객체지향에 대해 잘 설명해줄 것 같기 때문이다. 사실, 그리고 오해라니 하나하나 잘 따져줄 것 같지 않은가?

결과적으로 이 책을 읽고나니 어째서 조금 더 빨리 이 책을 만나지 못했을까 하는 아쉬움이 들었다.

만약 좀더 일찍 만났다면 친척동생의 중간고사도 구원받을 수 있었을 것이고, OOP는 물론이오 소프트웨어 공학에 대한 이해에도 나에게 큰 도움이 되었을 것이다. 

소프트웨어 공학이라는 말이 나왔는데, 본 책을 읽고나서 가장 처음 떠올랐던 생각은 대학 학부에서는 C++, JAVA와 같은 OOP언어를 가르치기 전에 소프트웨어 공학부터 가르치는 것이 좋지 않을까하는 것이었다. 소프트웨어 공학은 이름에서 알 수 있듯이 소프트웨어를 생산(?)하는 방법과 과정을 연구하는 분야라고 할 수 있을 것 같다. 가장 잘 알려진 것으로는 고객의 요구조건 수집 및 이를 표현하는 방법, 소프트웨어를 설계하는 방법, 소프트웨어를 구현 및 테스팅하는 방법 등이 이에 해당한다. 그리고 소프트웨어 공학은 OOP와 밀접한 관계가 있다. 
솔직히 말하자면 나는 대학 학부에서 OOP에 대해 깊게 배우지 못했다. 하지만 본 책에 실려있던 유즈케이스니, 재사용이니, 모듈이니 하는 것들에 대해 이해할 수 있었는데, 이는 다름 아닌 소프트웨어 공학 수업을 수강했기 때문이다. 

내가 다녔던 대학에서는 1학기에 C언어를 배우고, 2학기에 C++와 같은 OOP를 가르쳐주었다. 하지만 프로그래밍에 대해 어떤 사전지식도 없는 학생에게는 둘의 차이를 쉽게 이해하지 못한다. 내 경우에만 하더라도 1학년 때 C++ 수업 중 상속과 오버라이드가 등장하기 전까지 C언어와 무엇이 다른지 알 수 없었다. 상속과 오버라이드도 이들이 어떤 개념과 구조를 가지고 있는지 이해하지 못한채, 이런 기능이 있어서 C언어와 다르구나 정도로 이해했었다. 

만약 소프트웨어 공학을 먼저 배웠더라면, 소프트웨어란 어떻게 작성되어야 하고 설계해야하는지 배우고, 이를 실현할 수 있는 JAVA나 C++에 대해 배웠다면 좀더 OOP에 대한 이해를 도울 수 있지 않았을까?라는 생각이 든다.


내 생각에 본 책은 OOP를 학교 시험 때문이든, 개인적인 관심이든 간에 관심을 가진 사람이라면 많은 도움을 받을 수 있을 책이라고 생각한다. 하지만 이 책에서는 코딩의 예는 그다지 많이 등장하지 않기 때문에, 기술서적과 같은 내용을 바라는 이들은 실망할 수 있을 것이다. 
내용이 잘 정리되어있고, 이해를 도울 수 있는 예제들이 잘 준비되어 있다. OOP에 대한 개념에 대해 이해하고 싶은 이들에게 추천한다. 

덧글

댓글 입력 영역


애드센스반응형

통계 위젯 (화이트)

556
388
1674601