C#/클래스와 구조체

[C#] 다형성(Polymorphism)

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

 

1. 기본 개념

다형성은 같은 메서드 호출이지만, 객체에 따라 다르게 동작하게 만드는 객체지향 프로그래밍의 중요한 개념이다.

예를 들어 Speak()이라는 메서드를 동물마다 다르게 구현할 수 있다.

 

 

2. 가상(Virtual) 메서드

부모 클래스에서 메서드를 virtual로 선언하면, 자식 클래스에서 이를 override하여 다른 방식으로 재정의할 수 있다.

 virtual뜻은 자식이 재구현 했을 있다. 재정의를 했을 있다, 실형태가 다를 있으니 실형태에 재정의가 되어있는지 확인해봐라라는 뜻

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

class Dog : Animal {
    public override void Speak() {
        Console.WriteLine("멍멍!");
    }
}

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

→ Animal 타입으로 참조했지만, 실제 객체가 Dog이기 때문에 Dog Speak()가 호출됨. 이것이 다형성!

 

 

3. 추상(Abstract) 클래스와 메서드

🔹 추상 클래스란?

  • abstract 키워드로 선언
  • 인스턴스를 만들 수 없고, 상속을 통해서만 사용
  • 일부 메서드는 구현하고, 일부는 자식 클래스에서 반드시 구현하도록 강제 가능

🔹 추상 메서드란?

  • 구현 없이 선언만 존재
  • 자식 클래스에서 반드시 override하여 구현해야 함(강제임)

📝 코드 예시

abstract class Animal {
    public abstract void Speak();  // 반드시 자식이 구현해야 함
}

class Bird : Animal {
    public override void Speak() {
        Console.WriteLine("짹짹!");
    }
}

 

 

📖정리

 다형성은 동일한 이름의 메서드가 객체에 따라 다르게 동작하는 것
 virtual과 override 키워드를 사용하여 구현 가능
 abstract 클래스는 공통 기능을 정의하고, 자식이 반드시 필요한 동작을 구현하도록 강제
✔ 다형성을 통해 유지보수가 쉽고, 확장에 유리한 구조 설계 가능

728x90

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

[C#] 추상클래스  (3) 2025.05.27
[C#] 오버라이딩  (0) 2025.04.17
[C#] 상속(Inheritance)  (0) 2025.04.17
[C#] 프로퍼티 (Property)  (0) 2025.04.17
[C#] 객체  (0) 2025.04.17