C# 문법 3주차-다형성

C014·2023년 11월 16일

C#

목록 보기
10/22

다형성이란?: 같은 타입이지만 다양한 동작을 수행할 수 있는 능력을 뜻합니다.

  1. 가상 메서드
    • 가상 메서드는 부모클래스에서 정의되고, 자식클래스에서 재정의 할 수 있는 메서드
    • 가상 메서드는 virtual 키워드를 사용하여 선언되며 자식 클래스에서 재정의 될 수 있습니다.
    • 이를 통해 자식 클래스에서 부모 클래스의 메서드를 변경하거나 확장할 수 있습니다.
class Parent
{
  // 프로퍼티도 virtual 키워드 사용할 수 있습니다.
  public virtual string Str { get; set; }
  
  // 가상 메서드로 선언합니다.
  public virtual void show() 
  {
    Console.WriteLine("Parent의 show() 메서드");
  }
}

class Child : Parent
{
  // 프로퍼티도 재정의할 수 있습니다.
  public override string Str { get; set; }
  
  // show() 메서드를 재정의합니다.
  public override void show()
  {
    Console.WriteLine("Parent 클래스의 show() 메서드 오버로드");
  }
}
출처: https://developer-talk.tistory.com/469 [DevStory:티스토리]

  1. 추상 클래스와 메서드
    • 추상 클래스는 직업적으로 인스턴스를 생성할 수 없습니다.
    • 주로 상속을 위한 베이스 클래스로 사용됩니다.
    • 추상 클래스는 abstract 키워드를 사용하여 선언되며, 추상 메서드를 포함할 수 있습니다.
    • 추상 메서드는 구현부가 없는 메서드로, 자식 클래스에서 반드시 구현되어야 합니다.
abstract class Shape
{
    public abstract void Draw(); // abstract 키워드로 선언
}

class Circle : Shape
{
    public override void Draw() // 자식클래스에서 override를 사용하여 재정의
    {
        Console.WriteLine("Drawing a circle");
    }
}

3. 오버라이딩과 오버로딩

오버라이딩 : 상위 클래스에서 물려받은 메서드를 하위 클래스에서 재정의하는것

  • 부모클래스에서 정의된 메서드를 자식클래스에서 재정의하는것을 의미합니다.
  • 상속 관계에 있는 클래스 간에 발생하며 메서드의 이름, 매개변수, 반환타입이 같아야합니다.
  • 자식 클래스는 부모 클래스의 메서드를 재정의하여 자신에게 맞는 동작을 구현 할 수 있습니다.
public class Shape
{
    public virtual void Draw()
    {
        Console.WriteLine("Drawing a shape.");
    }
}

public class Circle : Shape
{
    public override void Draw() // 자식클래스에서 override를 이용
    {
        Console.WriteLine("Drawing a circle.");
    }
}

오버로딩 : 하나의 메서드에 여러가지 구현하는것

  • 동일한 메서드 이름을 가지고 있지만 매개변수의 개수, 타입 또는 순서가 다른 여러개의 메서드를 정의하는것을 의미합니다.
  • 오버로딩을 통해 동일한 이름을 가진 메서드를 다양한 매개변수 조합으로 호출할 수 있습니다.
public class Calculator
{
    public int Add(int a, int b)
    {
        return a + b;
    }

    public int Add(int a, int b, int c)
    {
        return a + b + c;
    }
}

Calculator calc = new Calculator();
int result1 = calc.Add(2, 3);         // 5
int result2 = calc.Add(2, 3, 4);      // 9
profile
doro

0개의 댓글