블로그 이미지
대갈장군

calendar

1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

Notice

2009. 12. 19. 05:50 프로그래밍
C++이나 C#은 매우 크고 방대한 언어다. 문법도 많고 외워야 할 것도 많으며 규칙도 정말 많다. 책을 사서 1장 부터 읽다보면 3장쯤 가면 복잡해지기 시작하면서 뭐가 뭔 말인지 모르겠다... @.@ 한숨을 푹쉬고 책을 덮는다... 그리고 속으로 '더 쉬운책이 없을까?' 라고 생각한다.

내가 많이 겪은 경험이다. 이것은 책이 자습서로서의 역활을 못하고 있다는 말과 같다. 거대한 개념이 있다면 그것의 핵심에 접근하기 위해서는 부분 부분이 아닌 전체의 맥과 흐름을 집어주는 역활을 자습서는 반드시 해야 한다.

내가 읽어본 많은 책들은 그렇지 못했지만 유일하게 김상형님이 쓰신 모든 저서는 이 흐름을 잡아준다. C++, C#이라는 거대한 것을 하나하나 분리해 서로를 유연하게 연결한 다음 독자가 충분히 어떤것을 이해할 단계에 도착하면 거기서 거대한 전체 지도를 보여주면서 내가 왜 여기에 왔는지 그리고 앞으로 어떤 길을 가야 하는지 정확하게 알려준다.

김상형님의 책을 보면서 깨우친 것을 나름대로 정리하고자 하는데 그 첫째가 바로 객체 지향의 기본인 '클래스'이다.

가장 단순하게 클래스를 정의하면 C 구조체의 확장형태라고 생각할 수 있다. 그냥 뭐 이런 저런 변수를 담는 통으로 생각하기 쉽다.

하지만 C#에 들어오면서 완전 객체 지향성을 강조하게 되면서 구조체와 클래스는 '상속'이라는 결정적 차이를 가지게 된다. 바로 이 상속이 가능해 지면서 클래스는 '계층'이라는 말에 더 가까워 졌다.

상속인터페이스를 이용한 뚜렷하고 명확한 계층 구조의 클래스 설계로 한눈에 들어오는 구조적 설계가 가능해 졌다. 바로 이것이 객체 지향 프로그래밍의 핵심이다. (인터페이스는 차후 설명하겠다.)

예전에도 언급했듯이 이제는 프로그램 개발자가 두 부류로 분류가 된다. 첫째는 라이브러리 개발자다. 대형 회사, 즉, microsoft와 같은 회사에서 최종 사용자가 사용할 수많은 라이브러리 함수와 클래스를 만들어내는 사람을 말한다. 둘째는 최종 개발자다. 이 사람은 나와 같은 사람으로 대형 회사 개발자가 만들어 놓은 수많은 라이브러리 함수를 불러와 사용하기만 한다. 

고로 나와 같은 최종 개발자들은 내가 쓸 함수를 처음부터 일일이 만들어 쓰는게 아니라 '잘 불러다가' 쓰면 그만이다.

바로 이 '잘 불러다가'가 '구조 설계'이며 이 '구조 설계'를 위해 가장 사람에게 직관적이고 적합한 분류 방식이 계단식 방식, 이른바 'Class (계급 혹은 계층) 구조' 이다. 

내가 판단하기로는 클래스의 의미가 바로 여기서 나왔다고 생각하지만 물론 아닐 수도 있다. ㅋㅋㅋ (아님 말고)

상속은 부모 클래스의 모든 것을 재사용하며 동시에 추가적인 것을 곁들여 새로운 자식 클래스를 만들어내는데,  이것은 계층적 구조 설계에 딱 맞아 떨어지는 방식이다. 

클래스를 문법적으로 설명하자면, 생성자, 파괴자, 가상함수, 추상함수, 멤버 변수, 정적변수, 정적클래스, 봉인클래스, 순수 가상함수, 추상클래스 등등등등 수많은 것들이 존재하지만, 내가 이 글에서 말하고자 하는 것은 클래스라는 단어가 객체 지향 언어에서 선택 되었는가이다. 

거대한 객체 지향 언어를 한 두발 떨어져서 그 의미와 구조, 근원을 볼 수 있게 되면 세세한 문법과 규칙들이 너무나도 당연하게 받아들여지는 순간이 있다. 내가 원하는 것은 바로 그것이다.





posted by 대갈장군