메서드 오버로딩(Method OverLoading) /메서드 다중 정의
- 동일한 이름의 매개변수(파라미터)가 다른 메서드를 여러 개 정의하는 것
- 기본적으로 메서드는 변수와 마찬가지로 이름(식별자)이 중복되면 안 되지만, 매개변수의 타입이나 개수를 달리하면 이름이 같더라도 구분이 되므로 하나의 식별자로 여러 개의 메서드를 호출할 수 있다
[메서드 오버로딩 작성 규칙]
1. 메서드 이름이 동일
2. 매개변수(파라미터) 목록이 반드시 달라야 한다
: 매개변수 개수 또는 매개변수 타입이 달라야 한다 (즉, 호출하는 시점에서 메서드를 구분할 수 있어야 한다)
3. 리턴 값은 오버 로딩과 무관 (리턴 값이 달라도 매개변수가 동일하면 오버 로딩이 아니다)
=> 동일한 이름의 메서드를 호출하는 시점에서 구분할 수 있어야 메서드 오버 로딩
ex) 메서드 오버 로딩이 없는 경우( 메서드를 일일이 만들어줘야 한다)
using System;
namespace Test
{
public class Program
{
static void Main(string[] args)
{
Fork fork = new Fork();
Spoon spoon = new Spoon();
Chopstick chopsticks = new Chopstick();
MethodNormal mn = new MethodNormal();
mn.eatUsingFork(fork);
mn.eatUsingSpoon(spoon);
mn.eatUsingChopstick(chopsticks);
}
class MethodNormal
{
// eatUsingFork() 메서드 정의 - 리턴값 없음, 매개변수 Fork 인스턴스 타입
// => "Fork 를 사용하여 식사" 출력
public void eatUsingFork(Fork fork)
{
Console.WriteLine(fork.name + " 를 사용하여 식사");
}
// eatUsingSpoon() 메서드 정의 - 리턴값 없음, 매개변수 Spoon 인스턴스 타입
// => "Spoon 을 사용하여 식사" 출력
public void eatUsingSpoon(Spoon spoon)
{
Console.WriteLine(spoon.name + " 을 사용하여 식사");
}
// eatUsingChopstick() 메서드 정의 - 리턴값 없음, 매개변수 Chopstick 인스턴스 타입
// => "Chopstick 을 사용하여 식사" 출력
public void eatUsingChopstick(Chopstick chopsticks)
{
Console.WriteLine(chopsticks.name + " 을 사용하여 식사");
}
}
class Fork
{
public String name = "Fork";
}
class Spoon
{
public String name = "Spoon";
}
class Chopstick
{
public String name = "Chopstick";
}
}
}
[결과]
ex) 매개변수의 이름이 같고 매개변수가 동일한 오버 로딩
1. 매개변수의 이름이 다른 경우에는 오버로딩x
public void eat(int a) {}
public void eat(int b) {}
2. 매개변수의 리턴 타입만 다른 경우에도 오버로딩 X
public void eat(int a) {}
public String eat(int b) {}
using System;
namespace Test
{
public class Program
{
static void Main(string[] args)
{
Fork fork = new Fork();
Spoon spoon = new Spoon();
Chopstick chopsticks = new Chopstick();
MethodOverloading mo = new MethodOverloading();
mo.eat(chopsticks);
mo.eat(fork);
mo.eat(spoon);
}
class MethodOverloading
{
// 메서드 오버로딩
// eat() 메서드로 이름을 통일하여 Fork, Spoon, Chopstick 인스턴스를 각각 전달
public void eat(Fork fork)
{
Console.WriteLine(fork.name + " 를 사용하여 식사");
}
public void eat(Spoon spoon)
{
Console.WriteLine(spoon.name + " 을 사용하여 식사");
}
public void eat(Chopstick chopsticks)
{
Console.WriteLine(chopsticks.name + " 을 사용하여 식사");
}
}
class Fork
{
public String name = "Fork";
}
class Spoon
{
public String name = "Spoon";
}
class Chopstick
{
public String name = "Chopstick";
}
}
[결과]
ex3) 매개변수 개수를 달리 한 오버로딩
using System;
namespace Test
{
public class Program
{
static void Main(string[] args)
{
MethodOverloading2 mo = new MethodOverloading2();
mo.print(3, "Hello, World!"); // "Hello, World!" 3번 반복 출력
// "Hello, World!", "TEST" 5번 출력
mo.print(5, "Hell, World!", "TEST");
// "Hello, World!", "TEST", "C#" 5번 출력
mo.print(5, "Hell, World!", "TEST", "C#");
}
class MethodOverloading2
{
//매개변수의 갯수가 다르면 오버로딩으로 인정된다
public void print(int count, String data)
{
// count 횟수만큼 data 문자열 반복 출력
for (int i = 1; i <= count; i++)
{
Console.WriteLine(data);
}
}
public void print(int count, String data, String data2)
{
// count 횟수만큼 data 문자열 반복 출력
for (int i = 1; i <= count; i++)
{
Console.WriteLine(data + ", " + data2);
}
}
public void print(int count, String data, String data2, String data3)
{
// count 횟수만큼 data 문자열 반복 출력
for (int i = 1; i <= count; i++)
{
Console.WriteLine(data + ", " + data2 + ", " + data3);
}
}
}
}
}
[결과]
반응형
'C#' 카테고리의 다른 글
C#기초 - 접근 제한자 (public vs private),(Getter,Setter 사용법) (0) | 2021.05.27 |
---|---|
C# 기초 - 레퍼런스, 생성자 this (0) | 2021.05.15 |
C# 메서드 사용(2) - 매개변수전달:선언 기본형 변수, 참조형 변수 (0) | 2021.02.17 |
C# 메서드 사용(1) - 인스턴스 변수, 로컬변수 선언 (0) | 2021.01.13 |
C# 메서드 정의(2) (1) | 2020.11.04 |
댓글