반응형
객체지향 : 다형성 - 오버로드 (Method Overload)
1. 메서드 오버로드
더하기를 하는 메서드를 구현해보자.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
using System;
namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Calculate.Plus(3, 5));
}
}
class Calculate
{
static public int Plus(int a, int b)
{
return a + b;
}
}
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
실행할 경우 당연히 8이 출력된다.
그러나 만약 Plus의 매개변수로 3 대신 3.0 을 넘겨준다면 컴파일 오류가 뜬다.
왜냐하면 Plus 메서드는 매개변수로 int 형 밖에 받지 못하기 때문이다.
이때 실수형도 같은 Plus 메서드로 처리하게 하고 싶으면 같은 메서드명으로 새 메서드를 정의하면 된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
class Calculate
{
static public int Plus(int a, int b)
{
return a + b;
}
static public double Plus(double a, double b)
{
return a + b;
}
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
이제 Calculate.Puls( 3.0 , 5.0 ) 과 같이 쓸 수 있다.
이렇게 같은 메서드명으로 여러가지의 매개변수를 처리하는 것을 메서드 오버로드라고 부른다.
2. 연산자 오버로드
연산자도 오버로드 할 수 있다.
원(won)이라는 타입이 있다고 하자.
이 타입끼리의 덧셈 연산을 구현하고 싶으면 위에서와 그냥 더하기 메서드를 이용해도 된다.
하지만 연산자를 이용할 수도 있다.
다음과 같은 Won 클래스를 정의하자.
1
2
3
4
5
6
7
8
9
10
|
class Won
{
public int value;
public Won(int value)
{
this.value = value;
}
}
|
먼저 이 Won 타입 간의 덧셈을 메서드를 통해 구현해보자
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
using System;
namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
Won won1 = new Won(5000);
Won won2 = new Won(50);
Console.WriteLine(Won.plus(won1, won2));
}
}
class Won
{
public int value;
public Won(int value)
{
this.value = value;
}
public static int plus(Won won1, Won won2)
{
return won1.value + won2.value;
}
}
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
실행시키면 결과는 당연히 5050이 나온다.
같은 기능을 연산자 오버로드를 통해 구현할 수도 있다.
public static 타입 operator 연산자 ( 타입1 변수명1, 타입2 변수명2 )
{
}
위 문법을 그대로 따라 Won 타입의 + 연산자를 오버로드해보자
public static Won operator + ( Won won1, Won won2 )
{
return new Won( won1.value + won2.value )
}
전체 코드는 이렇다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
using System;
namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
Won won1 = new Won(5000);
Won won2 = new Won(50);
Won won3 = won1 + won2;
Console.WriteLine(won3.value);
}
}
class Won
{
public int value;
public Won(int value)
{
this.value = value;
}
public static Won operator +(Won won1, Won won2)
{
return new Won(won1.value + won2.value);
}
}
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
실행하면 마찬가지로 5050이 출력된다.
반응형
'C#' 카테고리의 다른 글
[C#] 은행 게임 코드 (수정본) (0) | 2020.01.17 |
---|---|
[C# / 게임] 은행 게임 만들어보기 (객체지향 정리) (0) | 2020.01.16 |
[C# / 객체지향] 8. 다형성 - 메서드 오버라이드 (Method Override) (0) | 2019.12.19 |
[C# / 객체지향] 7. 클래스 상속 (class inheritance) (0) | 2019.12.17 |
[C# / 객체지향] 6. 캡슐화와 정보 은닉 (0) | 2019.12.16 |