C#/클래스와 구조체

[C#] 오버라이딩

도도돋치 2025. 4. 17. 17:41
Contents 접기
728x90

 

1. 오버라이딩이란?

오버라이딩은 부모 클래스에서 정의된 메서드를 자식 클래스에서 재정의하여, 상황에 맞게 다르게 동작하도록 만드는 기능.

 

오버라이딩(Overriding)은 상속 관계에서 사용되며,
부모 클래스의 메서드를 자식 클래스가 다시 정의해서 덮어쓰는 것을 의미한다.

 

C#에서는 이때 다음과 같은 키워드를 사용한다.

  • virtual: 부모 클래스에서 오버라이딩 가능한 메서드에 사용
  • override: 자식 클래스에서 메서드를 재정의할 때 사용

 

2. 오버라이딩 기본 구조

class Animal {
    public virtual void Speak() {
        Console.WriteLine("동물이 소리냅니다.");
    }
}

class Dog : Animal {
    public override void Speak() {
        Console.WriteLine("멍멍!");
    }
}
Animal myDog = new Dog();
myDog.Speak();  // 출력: 멍멍!

+ 다형성 복습)

이처럼 Animal 타입으로 선언된 객체라도 자식 클래스인 Dog에서 재정의한 Speak()가 실행된다.
바로 이것이 다형성(Polymorphism)이다.

 

 

3. 왜 오버라이딩을 사용할까?

  • 동일한 이름의 메서드지만 다른 동작을 원할 때
  • 상속 구조에서 공통 동작을 기본으로 두고, 세부 동작만 변경할 때
  • 다형성을 활용해 더 유연한 코드 작성이 가능

 

4. 📝예제

class Shape {
    public virtual void Draw() {
        Console.WriteLine("도형을 그립니다.");
    }
}

class Circle : Shape {
    public override void Draw() {
        Console.WriteLine("원을 그립니다.");
    }
}

class Rectangle : Shape {
    public override void Draw() {
        Console.WriteLine("사각형을 그립니다.");
    }
}
Shape shape1 = new Circle();
Shape shape2 = new Rectangle();

shape1.Draw();  // 출력: 원을 그립니다.
shape2.Draw();  // 출력: 사각형을 그립니다.

 

 

5. 오버라이딩 주의사항

  • 부모 클래스의 메서드는 virtual 또는 abstract로 선언되어야 함
  • 만약 부모 메서드가 virtual이 아닌데 동일한 이름의 메서드를 자식에서 정의하고 싶다면 new 키워드를 써서 자식타입으로 호출하면 자식메서드가 호출됨
  • 자식 클래스에서는 override 키워드로 반드시 재정의해야 함
  • 매개변수와 반환형이 반드시 동일해야 오버라이딩 가능

 

📖 정리

✔ 오버라이딩은 상속을 전제로 하며 부모의 메서드를 자식이 자신에게 맞게 재정의할 수 있음
 virtual + override 조합으로 사용
✔ 다형성을 통해 코드를 유연하고 확장 가능하게 만들어줌

 

 

728x90

'C# > 클래스와 구조체' 카테고리의 다른 글

추상클래스 abstract vs virtual  (0) 2025.05.27
[C#] 추상클래스  (3) 2025.05.27
[C#] 다형성(Polymorphism)  (0) 2025.04.17
[C#] 상속(Inheritance)  (0) 2025.04.17
[C#] 프로퍼티 (Property)  (0) 2025.04.17