Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# 계층적 상속(Hierarchical Inheritance) 완벽 정리: 예제 코드로 쉽게 이해하기

C# 계층적 상속이란?

계층적 상속(Hierarchical Inheritance)은 하나의 기본 클래스(Base Class)로부터 둘 이상의 파생 클래스(Derived Class)가 동시에 상속을 받는 구조를 말합니다. 마치 한 부모에게서 여러 자식이 태어나는 것처럼, 하나의 부모 클래스가 여러 자식 클래스에게 자신의 멤버를 물려주는 형태입니다.

이러한 구조는 공통 기능을 하나의 기본 클래스에 모아두고, 각 파생 클래스가 필요한 기능을 추가로 확장할 수 있게 해주므로 코드의 재사용성과 유지보수성을 크게 높여줍니다.

기본 클래스(Father) 정의하기

이번 예제에서는 Father 클래스를 기본 클래스로 사용하겠습니다. Father 클래스에는 간단한 메시지를 출력하는 display() 메서드가 포함되어 있습니다.

class Father {
    public void display() {
        Console.WriteLine("Display...");
    }
}

파생 클래스(Son, Daughter) 추가하기

이제 Father 클래스를 상속받는 두 개의 파생 클래스인 SonDaughter를 만들어 보겠습니다. C#에서는 콜론(:) 기호를 사용하여 상속 관계를 표현합니다.

Son 클래스

class Son : Father {
    public void displayOne() {
        Console.WriteLine("Display One");
    }
}

Daughter 클래스

class Daughter : Father {
    public void displayTwo() {
        Console.WriteLine("Display Two");
    }
}

Son과 Daughter는 각각 Father의 display() 메서드를 물려받으면서, 자신만의 고유한 메서드(displayOne(), displayTwo())를 추가로 가지고 있습니다. 이것이 바로 계층적 상속의 핵심입니다.

전체 예제 코드

다음은 지금까지 설명한 내용을 모두 합친 C# 계층적 상속의 완전한 예제입니다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Inheritance {
    class Test {
        static void Main(string[] args) {
            // 기본 클래스 객체 생성
            Father f = new Father();
            f.display();

            // Son 객체 생성 - 상속받은 메서드와 고유 메서드 호출
            Son s = new Son();
            s.display();
            s.displayOne();

            // Daughter 객체 생성 - 상속받은 메서드와 고유 메서드 호출
            Daughter d = new Daughter();
            d.display();
            d.displayTwo();

            Console.ReadKey();
        }

        // 기본 클래스
        class Father {
            public void display() {
                Console.WriteLine("Display...");
            }
        }

        // 파생 클래스 1
        class Son : Father {
            public void displayOne() {
                Console.WriteLine("Display One");
            }
        }

        // 파생 클래스 2
        class Daughter : Father {
            public void displayTwo() {
                Console.WriteLine("Display Two");
            }
        }
    }
}

실행 결과

Display...
Display...
Display One
Display...
Display Two

예제 코드 분석

위 코드의 실행 흐름을 살펴보면 다음과 같습니다.

1. Father 객체 생성: Father 클래스의 인스턴스를 만들어 display() 메서드를 호출하면 "Display..."가 출력됩니다.

2. Son 객체 생성: Son 클래스는 Father를 상속했기 때문에, Son 객체에서도 부모의 display() 메서드를 그대로 호출할 수 있습니다. 동시에 Son만의 고유한 displayOne() 메서드도 사용 가능합니다.

3. Daughter 객체 생성: 마찬가지로 Daughter 객체 역시 Father로부터 상속받은 display() 메서드와 자신만의 displayTwo() 메서드를 모두 사용할 수 있습니다.

계층적 상속의 장점

계층적 상속을 활용하면 다음과 같은 이점을 얻을 수 있습니다.

코드 재사용성 향상: 공통 기능을 기본 클래스에 한 번만 작성하면, 모든 파생 클래스가 이를 재사용할 수 있어 중복 코드가 줄어듭니다.

유지보수 용이성: 공통 로직에 수정 사항이 생기면 기본 클래스만 변경하면 되므로, 여러 곳을 일일이 수정할 필요가 없습니다.

명확한 구조 설계: 클래스 간의 관계가 계층 구조로 표현되어 프로그램의 전체적인 설계를 한눈에 파악하기 쉽습니다.

마무리

이번 글에서는 C#의 계층적 상속 개념을 Father, Son, Daughter 클래스 예제를 통해 알아보았습니다. 하나의 기본 클래스에서 여러 파생 클래스가 상속받는 이 구조는 실무에서도 매우 널리 활용되는 패턴이니, 직접 코드를 작성해 보며 익혀보시기 바랍니다.