2024. 8. 31. 18:55ㆍc#
C#에서의 함수 오버로딩과 오버라이딩
함수 오버로딩과 오버라이딩은 C#에서 코드의 유연성과 재사용성을 높이는 중요한 기능입니다.
이 두 개념은 비슷하게 들리지만, 실제로는 서로 다른 목적과 방식으로 사용됩니다.
이번 포스팅에서는 함수 오버로딩과 오버라이딩의 차이점, 사용 방법,
그리고 실전 예제를 통해 이들 개념을 자세히 알아보겠습니다.
1. 함수 오버로딩
함수 오버로딩이란?
함수 오버로딩(Function Overloading)은 동일한 이름을 가진 여러 개의 함수를 정의할 수 있는 기능입니다.
이때 각 함수는 매개변수의 타입, 개수, 또는 순서가 다릅니다.
오버로딩은 같은 이름의 함수를 다양한 입력에 대해 재사용할 수 있게 해 주어 코드의 일관성을 유지합니다.
함수 오버로딩의 예제
// 두 정수를 더하는 함수
int Add(int a, int b)
{
return a + b;
}
// 세 정수를 더하는 함수 (오버로딩)
int Add(int a, int b, int c)
{
return a + b + c;
}
// 두 실수를 더하는 함수 (오버로딩)
double Add(double a, double b)
{
return a + b;
}
위의 예제에서 Add 함수는 세 가지 방식으로 오버로딩되었습니다:
- 두 정수를 더하는 함수
- 세 정수를 더하는 함수
- 두 실수를 더하는 함수
함수 호출
C# 컴파일러는 함수 호출 시 전달된 매개변수의 타입과 개수를 기준으로 올바른 오버로딩된 함수를 선택합니다.
int sum1 = Add(10, 20); // 두 정수를 더하는 함수 호출
int sum2 = Add(10, 20, 30); // 세 정수를 더하는 함수 호출
double sum3 = Add(5.5, 7.3); // 두 실수를 더하는 함수 호출
Console.WriteLine($"두 정수의 합: {sum1}");
Console.WriteLine($"세 정수의 합: {sum2}");
Console.WriteLine($"두 실수의 합: {sum3}");
이처럼 함수 오버로딩을 통해 다양한 데이터 타입과 입력에 대해 동일한 함수 이름을 사용할 수 있습니다.
2. 함수 오버라이딩
함수 오버라이딩이란?
함수 오버라이딩(Function Overriding)은 상속 관계에서 자식 클래스가 부모 클래스의 메서드를 재정의하는 기능입니다. 오버라이딩을 통해 자식 클래스는 부모 클래스의 기본 동작을 변경하거나 확장할 수 있습니다.
함수 오버라이딩의 예제
먼저, 부모 클래스에서 메서드를 정의합니다.
class Animal
{
public virtual void Speak()
{
Console.WriteLine("Animal makes a sound");
}
}
Animal 클래스의 Speak 메서드는 기본적으로 "Animal makes a sound"를 출력합니다.
이제 이 클래스를 상속받는 자식 클래스를 만들어보겠습니다.
class Dog : Animal
{
public override void Speak()
{
Console.WriteLine("Dog barks");
}
}
class Cat : Animal
{
public override void Speak()
{
Console.WriteLine("Cat meows");
}
}
Dog 클래스와 Cat 클래스는 각각 Speak 메서드를 오버라이딩하여 고유의 동작을 정의합니다.
함수 호출
자식 클래스에서 오버라이딩된 메서드를 호출하면,
부모 클래스의 메서드가 아닌 자식 클래스에서 재정의된 메서드가 실행됩니다.
Animal myDog = new Dog();
Animal myCat = new Cat();
myDog.Speak(); // Dog barks
myCat.Speak(); // Cat meows
위의 코드에서 myDog.Speak()와 myCat.Speak()는
각각 Dog과 Cat 클래스에서 오버라이딩된 메서드를 호출하여 "Dog barks"와 "Cat meows"를 출력합니다.
오버로딩과 오버라이딩의 차이점
- 오버로딩은 같은 이름의 메서드를 여러 개 정의하는 것이며, 매개변수의 타입, 개수, 또는 순서가 다릅니다.
- 오버라이딩은 상속 관계에서 부모 클래스의 메서드를 자식 클래스에서 재정의하는 것입니다. 메서드의 시그니처(이름과 매개변수)는 동일하지만, 구현 내용이 다릅니다.
함수 오버로딩과 오버라이딩은 C#에서 코드의 재사용성과 유연성을 높이는 중요한 기능입니다.
오버로딩을 통해 동일한 이름으로 다양한 기능을 제공할 수 있고,
오버라이딩을 통해 상속 구조에서 클래스의 동작을 맞춤화할 수 있습니다.
이 두 개념을 잘 이해하고 활용하면 더 효율적이고 유지보수하기 쉬운 코드를 작성할 수 있습니다.
이 포스팅에서는 함수 오버로딩과 오버라이딩의 기본 개념, 사용 예제, 그리고 이 둘의 차이점을 설명했습니다.
이 내용을 숙지하면 다양한 상황에서 이들 기능을 효과적으로 활용할 수 있을 것입니다.
'c#' 카테고리의 다른 글
c# List와 ArrayList (0) | 2024.09.01 |
---|---|
C# 배열(Array)과 컬렉션(Collection) (0) | 2024.09.01 |
c# 메서드와 함수 (0) | 2024.08.31 |
c# 반복문(for, while, do-while, foreach) (0) | 2024.08.30 |
c# 조건문(if, else if, else, switch) (0) | 2024.08.28 |