JScript의 메서드 오버로드 방법
업데이트: 2007년 11월
클래스에 있는 둘 이상의 JScript 멤버(함수 또는 속성)의 이름은 같지만 시그니처가 다른 경우 이를 "오버로드된" 함수(속성)라고 합니다. 함수의 "시그니처"는 해당 함수가 받아들이는 숫자, 형식 및 매개 변수의 순서를 기반으로 합니다. 두 함수가 동일한 형식의 인수를 동일한 개수만큼 같은 순서로 받아들이는 경우 두 함수의 시그니처는 같습니다. 같은 형식의 인수를 다른 순서로 받아들이는 함수 또는 인수의 수가 다르거나 인수의 형식이 다른 함수는 시그니처도 다릅니다. 인수의 이름은 시그니처에 영향을 주지 않습니다. 정적 함수는 오버로드에 참여할 수도 있지만 반환 형식과 마찬가지로 메서드의 정적 상태는 시그니처에 영향을 주지 않습니다. 따라서 인스턴스 메서드와 이름이 같은 정적 메서드는 매개 변수 목록이 달라야 합니다.
처리 논리
오버로드된 함수가 호출되면 함수에 전달된 인수의 실제 형식에 따라, 전달된 인수와 가장 일치하는 인수를 가진 오버로드 함수가 호출됩니다. 인수 형식이 특정 오버로드와 정확하게 일치하면 해당 오버로드가 호출됩니다. 인수 형식과 일치하는 오버로드가 없으면 제거 처리를 통해 호출될 오버로드가 결정됩니다. 제거 처리는 실제 형식을 사용 가능한 오버로드의 형식으로 얼마나 쉽게 변환할 수 있는지를 기반으로 합니다. 자세한 내용은 JScript에서의 강제 변환을 참조하십시오. 이 예제에서 MethodOverload 클래스에는 Greetings라는 세 개의 오버로드된 메서드가 있습니다. 첫 번째 오버로드는 매개 변수를 사용하지 않으며, 두 번째 오버르도는 String 형식의 매개 변수를 사용하며, 세 번째 오버로드는 String 형식과 int 형식의 두 매개 변수를 사용합니다.
var methodOverload = new MethodOverload();
methodOverload.Greetings();
methodOverload.Greetings("Mr. Brown");
methodOverload.Greetings(97, "Mr. Brown");
class MethodOverload
{
function Greetings()
{
print("Hello, and welcome!");
}
function Greetings(name : String)
{
print("Hello, " + name + "!");
}
function Greetings(ticket : int, name : String)
{
print("Hello, " + name + "! Your ticket number is " + ticket + ".");
}
}
이 프로그램은 다음과 같이 출력됩니다.
Hello, and welcome!
Hello, Mr.Brown!
Hello, Mr.Brown! Your ticket number is 97.