[C#의 객체지향] - Overloading(오버로딩)
ㅁ 오버로딩(Overloading)
오버로딩의 특징은 다음과 같습니다.
☞ 하나의 클래스 내에서 다른 기능을 가지면서 같은 이름을 가진 메서드입니다.
. 오버로딩(Overloading)은 같은 이름을 가진 여러 개의 메서드를 말합니다.
. 다중정의, 중복메서드라고 부르며 일반적으로 오버로딩(Overloading)이라고 합니다.
. 오버로딩은 클래스의 사용자를 편하게 하기 위해서 사용하는 객체지향의 기법이다.
☞ 메서드들의 구별은 메서드의 매개변수의 개수와 매개변수의 형에 의해서 구분됩니다.
☞ 리턴타입(Return Type)으로 구별하지 않습니다.
오버로딩을 이용하여 두 수를 합하는 예제 코드를 보도록 하겠습니다.
////////////////////////////////////////////////////////////////////////////////////////////
using System;
public class OverloadCalc
{
// int형 값을 반환함
public int Plus(int a, int b)
{
return (a+b);
}
// float형 값을 반환함
public float Plus(float a , float b)
{
return (a+b);
}
// double형 값을 반환함.
public double Plus(double a, double b)
{
return (a+b);
}
public static void
{
//인스턴트 생성
OverloadCalc oc = new OverloadCalc();
//각각 parameter값을 대입.
int i = oc.Plus(3,5);
float j = oc.Plus(0.1f,0.2f);
double k = oc.Plus(0.5,0.7);
// return 값을 화면에 출력
Console.WriteLine("int합 : {0}",i);
Console.WriteLine("float 합 : {0}",j);
Console.WriteLine("double 합 : {0}", k);
}
}
////////////////////////////////////////////////////////////////////////////////////////////
위 코드를 실행해 보면 아래와 같은 그림으로 나타날 것입니다. (Ctrl + F5)
위 예제 코드는 같은 이름을 가진 3개의 메소드가 존재합니다.
오버로딩 메소드를 살펴보면 아래와 같습니다.
☞ public int Plus(int a, int b){ }
☞ public float Plus(float a , float b){ }
메서드를 만들 때 메서드의 매개변수 형, 매개변수의 개수 그리고 리턴형이 다르면 메서드의 이름을 다르게 해서 만들어야 겠다고 생각했을 것입니다. 저 또한 오버로드가 몬지 몰랐을땐 그렇게 했었지요. 하지만 그럴필요가 없다는 것입니다.
하나의 메서서드의 이름으로 다양한 매개변수를 받아 들일 수 있는 메서드를 지원하기때문이지요. 이것을 오버로딩(Overloading)이라고 합니다.
그럼 컴파일러는 이 3개의 메서드를 어떻게 구분을 할까요!?
이름은 같고 매개변수의 형, 매개변수의 개수 그리고 리턴값이 틀릴 수 있기 때문에 구분할 수 있는 방법은 이세가지 중의 있겠죠. 리턴타입은 각각의 형에 따라 틀려질 수도 있으며 같아 질 수도 있기 때문에 리턴타입으로는 구분하지 않습니다. 그렇다면 남아 있는 것은 매개변수의 형과 매개변수의 개수입니다. 정확하게 내부적으로 사용자가 plus라는 중복메서드를 호출 했을 때 매개변수의 형과 매개변수의
개수로 구분합니다.
자 그럼 위의 내용의 핵심적인 부분만 요약해 보자면 아래와 같습니다.
------ 중복메서드를 구분할 때의 규칙 --------
★ 매개변수의 개수와 타입이 달라야 한다.
★ 매개변수의 개수와 타입 중 하나만 달라도 중복메서드의
조건으로써 성립 됩니다.
★ 메서드의 리턴타입은 중복메서드 구분할 때 사용하지 않습니다.
오버로딩(Overloading)의 개념은 일반 메서드, 생성자메서드, Static메서드에 이르기까지 메서드가 활용되는 곳이면 어디서든 등장합니다. 그러니 Overloading의 개념을 숙지하는 것이 공부하는데 많은 도움이 될지 않을까 싶습니다!
참고 서적 : 소설같은 C#