객체 지향 프로그래밍에서 오버로딩과 오버라이딩은 클래스가 이름은 같지만 기능이 다른 여러 메서드를 가질 수 있도록 하는 기술입니다.
오버로딩(Overloading)은 클래스가 이름은 같지만 함수의 기능이 다른 메서드를 만들 수 있는 기능입니다. 메서드 오버로딩(Overloading)을 사용하면 클래스에 이름은 같지만 인수 수나 인수 유형이 다른 여러 메서드가 있을 수 있습니다. 예를 들어, 클래스에는 이름이 'calculate'인 두 개의 메서드가 있을 수 있습니다. 하나는 두 개의 정수를 인수로 사용하여 합계를 반환하고 다른 하나는 세 개의 정수를 인수로 사용하여 평균을 반환합니다. 이 두개의 'calculate' 메서드는 이름은 같지만 서명이 다르므로 오버로드된 것으로 간주됩니다.
오버라이딩(Overriding)은 부모 클래스에서 상속된 메서드의 다른 구현을 제공하는 자식 클래스의 기능입니다. 메소드 오버라이딩(Overriding)을 통해 하위 클래스는 동일한 메소드 서명을 유지하면서 상위 클래스에서 상속된 메소드의 동작을 재정의할 수 있습니다. 예를 들어 자식 클래스는 객체의 다른 문자열 표현을 제공하기 위해 부모 클래스에서 상속된 toString 메서드를 재정의할 수 있습니다.
다음은 C#에서 오버로딩 및 오버라이딩의 예입니다.
class Animal
{
public virtual void MakeNoise()
{
Console.WriteLine("Some noise");
}
}
class Dog : Animal
{
public override void MakeNoise()
{
Console.WriteLine("Bark");
}
public void MakeNoise(int volume)
{
Console.WriteLine("Barking at volume " + volume);
}
}
이 예제에서 Animal 클래스에는 virtual 키워드로 표시된 단일 MakeNoise 메서드가 있습니다. Dog 클래스는 Animal 클래스를 확장하고 override 키워드를 사용하여 MakeNoise 메서드를 재정의합니다. Dog 클래스는 또한 이름은 같지만 서명이 다른 추가 메서드를 정의하여 MakeNoise 메서드를 오버로드합니다 (즉, 다른 수의 인수).
C#에서 메서드를 재정의하려면 파생 클래스의 메서드가 override 키워드로 표시되어야 하고 기본 클래스의 메서드와 동일한 서명이 있어야 합니다. 메서드를 오버로드하려면 파생 클래스의 메서드 이름이 기본 클래스의 메서드와 같아야 하지만 시그니처는 달라야 합니다.
'공부 > OOP' 카테고리의 다른 글
인스턴스(instance)란? (0) | 2023.01.15 |
---|---|
객체지향의 5대 원칙 (0) | 2023.01.15 |
객체지향의 개념과 객체지향의 4대 특징 (0) | 2023.01.14 |
접근자(Getter)와 설정자(Setter)의 개념 (0) | 2023.01.13 |
캡슐화(Encapsulation)란? (0) | 2023.01.13 |