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

C# 상속(Inheritance) 완벽 가이드: 개념부터 예제까지

C#에서 상속(Inheritance)이란?

상속(Inheritance)은 객체 지향 프로그래밍(OOP)의 핵심 개념 중 하나로, 하나의 클래스를 다른 클래스를 기반으로 정의할 수 있게 해주는 기능입니다. 상속을 활용하면 애플리케이션을 더 쉽게 만들고 유지보수할 수 있으며, 이미 작성된 코드의 기능을 재사용할 수 있어 개발 시간도 크게 단축됩니다.

상속은 기본 클래스(Base Class)파생 클래스(Derived Class)라는 두 가지 개념을 바탕으로 동작합니다. 파생 클래스는 기본 클래스의 필드(데이터)와 메서드(함수)를 물려받아 그대로 사용하거나, 필요에 따라 새로운 기능을 추가해 확장할 수 있습니다.

참고로 C#에서는 하나의 클래스가 여러 클래스를 동시에 상속하는 다중 상속은 지원되지 않으며, 오직 하나의 기본 클래스만 상속받을 수 있습니다. 대신 인터페이스(interface)는 여러 개를 동시에 구현할 수 있어, 다중 상속이 주는 이점을 상당 부분 대체할 수 있습니다.

기본 클래스와 파생 클래스 문법

파생 클래스를 선언할 때는 콜론(:) 기호를 사용하여 상속받을 기본 클래스를 지정합니다. 아래 예시에서 Shape는 기본 클래스이고, Rectangle은 이를 상속받는 파생 클래스입니다.

class Rectangle : Shape {
    // 메서드
}

상속 예제

다음은 C#에서 기본 클래스와 파생 클래스를 함께 사용하는 방법을 보여주는 완전한 예제입니다. Shape 클래스는 너비와 높이를 설정하는 메서드를 제공하고, 이를 상속받은 Rectangle 클래스는 상속받은 멤버들을 활용해 사각형의 넓이를 계산합니다.

using System;

namespace InheritanceApplication {
    class Shape {
        public void setWidth(int w) {
            width = w;
        }
        public void setHeight(int h) {
            height = h;
        }
        protected int width;
        protected int height;
    }

    // 파생 클래스
    class Rectangle : Shape {
        public int getArea() {
            return (width * height);
        }
    }

    class RectangleTester {
        static void Main(string[] args) {
            Rectangle Rect = new Rectangle();
            Rect.setWidth(5);
            Rect.setHeight(7);
            // 객체의 넓이 출력
            Console.WriteLine("Total area: {0}", Rect.getArea());
            Console.ReadKey();
        }
    }
}

코드 설명

  • Shape 클래스의 widthheight 필드는 protected로 선언되어, 외부에서는 접근할 수 없지만 이를 상속받은 Rectangle 클래스 내부에서는 자유롭게 사용할 수 있습니다.
  • Rectangle 클래스는 별도로 너비와 높이를 저장하는 코드 없이, 기본 클래스의 setWidth()setHeight() 메서드를 그대로 호출하여 사용합니다.
  • Main 메서드에서는 너비 5, 높이 7을 설정한 뒤 getArea()를 호출해 넓이를 계산하고 콘솔에 출력합니다.

실행 결과

Total area: 35

위 결과에서 확인할 수 있듯이, 파생 클래스인 Rectangle은 기본 클래스 Shape의 모든 기능을 물려받아 문제없이 동작합니다. 이처럼 상속을 잘 활용하면 중복 코드를 줄이고, 구조적이며 유지보수하기 좋은 프로그램을 작성할 수 있습니다.