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

C# 메서드 재정의(Overriding) 개념과 예제 총정리

C#에서 메서드 재정의(Method Overriding)는 런타임 다형성(Runtime Polymorphism)을 구현하는 핵심 기법입니다. 재정의는 동적 바인딩(Dynamic Binding) 또는 늦은 바인딩(Late Binding)이라고도 불리며, 프로그램 실행 시점에 어떤 메서드가 호출될지 결정됩니다.

이러한 런타임 다형성은 주로 추상 클래스(Abstract Class)가상 함수(Virtual Function)를 통해 구현됩니다. 추상 클래스는 구현부가 없는 추상 메서드를 포함하며, 이 메서드의 실제 구현은 파생 클래스(자식 클래스)에서 담당합니다.

메서드 재정의의 동작 원리

재정의가 작동하는 방식은 다음과 같습니다.

  • 기본 클래스에서 abstract 또는 virtual 키워드로 메서드를 선언합니다.
  • 파생 클래스에서 override 키워드를 사용해 해당 메서드를 다시 구현합니다.
  • 런타임에 객체의 실제 타입에 따라 호출될 메서드가 결정됩니다.

예제 코드

다음은 추상 클래스를 활용해 런타임 다형성과 메서드 재정의를 구현한 C# 예제입니다.

using System;

namespace PolymorphismApplication {
    abstract class Shape {
        public abstract int area();
    }

    class Rectangle : Shape {
        private int length;
        private int width;

        public Rectangle(int a = 0, int b = 0) {
            length = a;
            width = b;
        }

        public override int area() {
            Console.WriteLine("Rectangle class area :");
            return (width * length);
        }
    }

    class RectangleTester {
        static void Main(string[] args) {
            Rectangle r = new Rectangle(10, 7);
            double a = r.area();
            Console.WriteLine("Area: {0}", a);
            Console.ReadKey();
        }
    }
}

코드 설명

1. 추상 클래스 Shape

Shape 클래스는 abstract로 선언되었으며, 추상 메서드 area()를 포함합니다. 추상 메서드는 본문이 없으므로 반드시 파생 클래스에서 구현해야 합니다.

2. 파생 클래스 Rectangle

Rectangle 클래스는 Shape를 상속받아 override 키워드로 area() 메서드를 재정의합니다. 이 메서드는 가로와 세로를 곱해 사각형의 넓이를 계산하고 반환합니다.

3. 실행 결과

프로그램을 실행하면 다음과 같은 출력 결과를 확인할 수 있습니다.

Rectangle class area :
Area: 70

정리

C#의 메서드 재정의는 추상 클래스와 함께 사용될 때 강력한 런타임 다형성을 제공합니다. 기본 클래스는 공통 인터페이스만 정의하고, 각 파생 클래스가 자신에게 맞는 동작을 구현함으로써 유연하고 확장 가능한 코드를 작성할 수 있습니다. 이는 대규모 애플리케이션에서 유지보수성을 높이는 중요한 객체지향 설계 패턴입니다.