C++은 객체지향 프로그램의 3대 핵심인 캡슐화, 상속성, 다형성을 지원.
캡슐화(Encapsulation)
상속성과 재사용성(Inheritance and Reuse)
다형성(Polymorphism)
캡슐화(Encapsulation)
예를 들어, 전기 기술자가 저항기를 필요로 할 때 이 기술자는 저항기를 새로이 도안부터 만들 필요는 없다. 저항기 창고로 가서, 각 특성을 나타내는 규격표를 보고 필요한 것을 골라온다. 저항기는 '블랙박스'라 하는데, 저항기가 기술자의 요구 규격에 맞기만 하면 그 저항기가 어떻게 돌아가는지, 내부구조가 어떻게 이루어졌는지 알 필요가 없다.
자기 완결 구조를 갖고 있는 한 단위의 속성을 '캡슐화'라 부른다. 그 캡슐화에는 '자료 은닉'이라는 것이 구현되어 있다. 자료 은닉이란 캡슐화된 한 단위의 내부 구조 및 동작원리를 잘 몰라도 사용할 수 있는 속성을 말한다. 마치 냉장고 안에 있는 압축기 같은 것을 잘 몰라도 냉장고를 잘 사용하듯이, 내부의 자료 멤버라는 것을 몰라도 잘 설계된 객체를 사용할 수 있다.
유사한 예로 기술자가 저항기를 사용할 때, 기술자는 저항기의 내부 상태를 알 필요가 없다. 저항기의 모든 특징은 저항기라는 객체 안에 캡슐화되어 있는데, 그 내부 특징은 전기회로 바깥 부분과 독립적으로 존재한다. 저항기를 효율적으로 쓰기 위해 내부 동작 원리를 굳이 잘 알 필요도 없다. 그 자료는 저항기 내부에 잘 은닉되어 있다.
C++은 사용자로 하여금 클래스라 부르는 사용자 정의형을 만들게 하여 캡슐화라는 속성을 지원한다. 잘 정의된 클래스는 캡술화된 실체로서 하나의 독립단위로 사용된다. 클래스의 실제 내부 작동 구조는 은닉되어야 한다. 잘 정의된 클래스의 사용자는 어떻게 클래스가 동작하는지는 알 필요가 없고 어떻게 쓰는지만 알면 된다.
상속성과 재사용성(Inheritance and Reuse)
자동차 회사 기술자가 자동차를 만들 때 두 가지 방법이 있다. 첫째 방법은, 처음 도안부터 시작하여 만들어 나가는 방법이고, 다른 방법은 기존 모델을 수정하는 방법이다. 예를 들어, 과거에 쓰던 '스타'라는 완벽한 모델이 있는데 여기에 터보 엔진과 6단 변속 기능이 부가된 자동차를 만들려 한다. 이때 고급 기술자는 밑바닥부터 다시 만들어 나가기보다는 기존의 '스타' 모델에 기능을 추가하고 이에 새로운 모델명, 예를 들자면 '뉴(new) 스타'를 붙이기를 원할 것이다. 이 '뉴스타'는 '스타'의 한 종류이긴 하지만 새로운 속성을 가진 모델이다.
C++은 상속성을 지원한다. 기존형을 확장한 새로운 형이 선언될 수 있다. 이 새로운 하위 클래스는 기존형으로부터 파생되었다고 표현하거나 파생형(derived type)이라 불리기도 한다. '뉴스타' 모델은 '스타' 모델로부터 파생되었고, 따라서 '스타'형의 모든 속성들을 상속받았으며 더 나아가 새로운 속성도 추가되었다.
다형성(Polymorphism)
'뉴스타' 모델은 '스타' 모델과는 가속기를 밟을 때 차이가 있을 것이다. 아마 '스타' 모델이 그저 가솔린만 엔진에 공급하는데 반해, '뉴스타' 모델은 새로운 터보 충전기와 연료 분사기를 사용할 것이다. 하지만 운전자는 그 엔진들의 내부 구조에 대해 자세히 알 필요는 없다. 단지, 가속기를 밟기만 하면 그에 따라 정확히 반응할 따름이다.
C++은 다른 객체들이 함수 다형성과 클래스 다형성이라는 것을 통해 같은 이름의 가속기가 정확히 반응하는 이러한 개념을 잘 지원한다. '다형(poly-)'이란 말 그대로 많다는 것을 의미하고, '성(morph)'이라는 것은 형태를 의미한다.
'프로그래밍 > C++' 카테고리의 다른 글
변수의 크기 알기 : sizeof() 연산자 (0) | 2011.08.18 |
---|---|
C++ 프로그램 개발의 단계 (0) | 2011.08.18 |
회원 관리 / 까페(마일리지) (0) | 2011.06.21 |
텍스트파일 불러오기 (0) | 2011.06.20 |
텍스트파일에 저장하기 (0) | 2011.06.19 |