객체지향 관련 서적을 보다 보면 원서에는 concrete class라고 되어있는 것이, 번역서에는 '구상 클래스', '구현 클래스' 또는 '구체 클래스'라고 번역되어 있다. 이 이름을 보고 나서 이게 구체적으로 어떤 클래스를 의미하는 것인지 크게 와닿지 않았다. 


좀 더 자세히 살펴보면, 우리가 이미 알고 있듯이 정의한 모든 연산(operation)이나 일부 연산의 구현을 서브클래스로 넘기는 추상 클래스(abstract class)나 객체의 연산에 대한 구현이 포함되어 있지 않고 정의만 존재하는 인터페이스를 통해 인스턴스를 만들 수 없다. 당연하게도 완성되지 않은 설계도를 가지고 제품을 만들 수는 없기 때문이다. 


그럼, 모든 연산에 대한 구현을 가지고 있는 클래스를 뭐라고 할까? 바로 concrete class라고 한다. 추상 클래스가 아닌 클래스는 모두 concrete class라고 할 수 있다. 정의한 모든 연산에 대한 구현을 가지고 있는 완전한 클래스이므로 우리는 이 클래스의 인스턴스를 만들 수 있다.

public abstract class A
{
    public abstract void methodA();
}

interface B
{
    void printB();
}

public class C : A, B
{
    public override void methodA()
    {
        Console.WriteLine("저는 추상 클래스의 구현이에요!");
    }

    public void printB()
    {
        Console.WriteLine("저는 인터페이스의 구현이에요!");
    }
}

class Program
{
    static void Main(string[] args)
    {
        C C = new C();
        C.methodA();
        C.printB();
    }
}

여기서 클래스 C는 추상 클래스 A와 인터페이스 B에서 상속받은 연산을 모두 구현하므로 concrete class라고 할 수 있다.

'프로그래밍 관련 > 객체 지향 설계' 카테고리의 다른 글

메모. Proxy pattern  (0) 2019.11.18
메모. Facade pattern  (0) 2019.11.17
메모. Factory method pattern  (0) 2019.05.19
메모. Builder pattern  (0) 2019.05.18
메모. Abstract factory pattern  (0) 2019.05.13