메소드 오버로딩
오늘 우리의 새롭고 흥미로운 주제는 메소드 오버로딩 입니다 . 주의하세요. 메서드 오버로딩을 메서드 재정의와 혼동해서는 안 됩니다.
재정의와 달리 오버로드는 매우 간단한 작업입니다. 실제로는 메서드에 대한 작업이 아니지만 때때로 파라메트릭 다형성(parametric polymorphism) 이라는 끔찍한 용어로 언급되기도 합니다 .
여기서 문제는 클래스 내의 모든 메서드가 고유한 이름을 가져야 한다는 것입니다. 글쎄, 그것은 완전히 정확하지 않습니다. 더 정확하게는 전혀 정확하지 않습니다. 메서드 이름은 고유하지 않아도 됩니다. 고유 해야 하는 것은 메소드 이름과 메소드 매개변수 유형의 합집합입니다. 이 조합은 메서드 서명 으로 알려져 있습니다.
예:
암호 | 설명 |
---|---|
|
이것은 허용됩니다. 두 메서드에는 고유한 이름이 있습니다. |
|
그리고 이것도. 두 메서드에는 고유한 이름(시그니처)이 있습니다. |
|
방법은 여전히 독특합니다 |
|
그러나 이것은 허용되지 않습니다 . 방법은 고유하지 않습니다 . 다른 유형을 반환하더라도. |
|
그러나 당신은 이것을 할 수 있습니다 . 메소드 매개변수는 고유 합니다. |
서명에는 메소드 이름과 매개변수 유형이 포함됩니다 . 메서드의 반환 유형과 매개변수 이름은 포함하지 않습니다 . 클래스는 동일한 서명을 가진 두 개의 메서드를 가질 수 없습니다 — 컴파일러는 어느 메서드를 호출해야 하는지 알 수 없습니다.
매개 변수 이름은 컴파일 중에 손실되기 때문에 중요하지 않습니다 . 메소드가 컴파일되면 해당 이름과 매개변수 유형만 알려집니다. 반환 유형은 손실되지 않지만 메서드의 결과는 아무 것도 할당할 필요가 없으므로 서명에도 포함되지 않습니다.
OOP 원칙 에 따르면 다형성은 단일 인터페이스 뒤에 다른 구현을 숨기고 있습니다. 예를 들어 메서드를 호출할 때 System.out.println()
전달되는 인수에 따라 다른 메서드가 호출됩니다. 이것이 다형성입니다.
그렇기 때문에 동일한 클래스에 포함된 동일한 이름을 가진 다른 메서드는 약한 형태의 다형성으로 간주됩니다.
GO TO FULL VERSION