함수 오버로딩 또는 컴파일 시간 다형성이라고도하는 메서드 오버로드는 동일한 이름이지만 동일한 범위에서 다른 서명을 갖는 두 개 이상의 메서드를 갖는 개념입니다. 이 기능을 지원하는 많은 프로그래밍 언어가 있습니다 : Ada, C ++, C #, D 및 Java.
C #에서 메서드 오버로드 예제
오버로드 쉐이프 {float Polygon (int radius, float pi) {float circleArea = pi * radius * radius; } int 다각형 (int 길이, int 너비) {int rectangleArea = length * breadth; } int 다각형 (int면) {int squareArea = side * side; }}1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 오버로드 쉐이프 {float Polygon (int radius, float pi) {float circleArea = pi * radius * radius; } int 다각형 (int 길이, int 너비) {int rectangleArea = length * breadth; } int 다각형 (int면) {int squareArea = side * side; }} |
위의 예에서 보듯이 'Polygon'메소드는 다른 메소드 서명으로 3 번 오버로드됩니다. 즉, 매개 변수의 유형 또는 개수가 다릅니다.
메서드 재정의
함수 재정의 또는 런타임 다형성이라고도하는 메서드 재정의는 자식 클래스가 부모 클래스에 정의 된 메서드에 자체 구현을 제공 할 수있게 해주는 OOP 기능입니다. 자식 클래스의 메서드가 동일한 이름, 서명 및 반환 형식을 가져야하는 경우 자식 클래스의 구현은 기본 클래스의 메서드 정의를 재정의합니다.
C #에서 메서드 재정의 예제
class Source1 {public void draw () {Console.Writeline ( "나는 클래스 Source1에있다"); }} class Source2 extends Source1 {public void draw () {Console.Writeline ( "나는 클래스 2에있다"); }}1 2 3 4 5 6 7 8 9 10 | class Source1 {public void draw () {Console. 작문 ( "나는 수업 1 출신이다"); }} 클래스 Source2 extends Source1 {public void draw () {Console. 작문 ( "나는 수업 2에있다"); }} |
여기서 Source2 클래스의 draw 메서드는 Source1 클래스에 정의 된 draw 메서드를 재정의합니다.
메소드 오버로딩과 메소드 오버라이드의 차이점
- 메소드 오버로드 메소드에는 다른 서명이 있어야합니다. 메서드에서 재정의 메서드는 동일한 서명을 가져야합니다.
- 함수 오버로딩은 메서드의 동작을 "추가"또는 "확장"하는 것입니다. 함수 오버라이드는 메서드의 동작을 완전히 "변경"하거나 "재정의"하는 것입니다.
- 메소드 오버로딩은 컴파일 시간 다형성을 달성하는 데 사용됩니다. 메서드 재정의는 런타임 다형성을 달성하는 데 사용됩니다.
- 메소드 / 함수 오버로딩에서 컴파일러는 어떤 객체가 컴파일시에 어떤 클래스에 할당되었는지를 알고 있지만, 이 정보를 오버라이드하는 메소드에서는 런타임까지 알 수 없습니다.
- 오버라이드가 기본 클래스에서 파생 된 클래스에서 수행되는 반면 Function 오버로드는 동일한 클래스에서 수행됩니다.