구상(Concrete) 클래스, 추상(Abstract) 클래스
객체 지향 프로그래밍에서 클래스는 크게 두 분류로 구분하지요.
그것은 바로 구상(concrete) 클래스와 추상(abstract) 클래스이고요.
객체 지향 설계에서 이 두 클래스 구분은 가장 기본적이고 중요한 개념입니다.
C++, Java, C# 등의 객체 지향 언어 문법책에서는 추상 클래스, 인터페이스, 상속, 다형성 그리고 virtual table 등을 문법적으로 설명합니다. 문법적 설명과 동작을 이해하는 것이 우선시되고요. 불행히도 이러한 책들을 독파 했음에도 클래스는 크게 두 가지로 분류할 수 있는데 어떤 것이 있냐고 물어 보면 잘모르는 사람들이 많아요.
객체를 정의하는 것이 클래스이며 이 클래스를 스택 또는 힙 메모리에 생성을 하여 사용 하는데 이것을 인스턴싱이라 부릅니다. 인스턴싱 할 수 있는 객체의 클래스를 구상 클래스라고 하고 반면 인스턴싱 할 수 없는 클래스를 추상 클래스라고 하지요. 문법적으로는, 객체에 pure virtual method를 포함하는 클래스가 인스턴싱 불가능한 추상 클래스입니다. pure virtual method로만 이루어진 클래스를 인터페이스 클래스이고 이 것 역시 추상 클래스이죠. 반대로 pure virutal method가 없는 클래스가 당연히 구상 클래스죠.
객체지향 프로그래밍의 시작은 바로 이 두 클래스로 구분하고 있다는 인지를 하는 것입니다.
아주 간단하고 사소한 인지라고 생각될 수도 있으나 이러한 인지 없이 객체 지향 언어를 프로그래밍하는 분이 생각 보다 많아요.
이 두 클래스 분류의 인지는 상속과 구성(Composition)을 잘 활용하는 것을 돕지요. 이 두 개념 역시 객체 지향 설계의 시작이고요.