메서드 시그니처(Method signature)란 무엇일까?
메서드 시그니처(Method Signature)**는 프로그래밍에서 메서드를 식별하는 데 사용되는 메서드의 구성 요소를 의미합니다. 자바를 비롯한 여러 언어에서 메서드를 구분하는 핵심 요소는 메서드 이름과 매개변수 목록입니다.
자바에서 메서드 시그니처의 구성 요소
- 메서드 이름: 메서드가 호출될 때 사용되는 이름.
- 매개변수 목록: 메서드가 받는 입력 값들. 각 매개변수의 타입과 순서가 중요하며, 이름은 중요하지 않습니다.
시그니처에 포함되지 않는 요소
- 반환 타입: 메서드 시그니처에는 포함되지 않습니다. 즉, 동일한 이름과 매개변수를 가지지만 반환 타입이 다른 메서드를 작성할 수 없습니다.
- 접근 제어자(public, private, protected), 예외 던지기(throws), static, final 키워드 등도 메서드 시그니처에는 포함되지 않습니다.
예시 1
public int add(int a, int b) {
return a + b;
}
이 메서드의 시그니처는 add(int, int)입니다.
- 메서드 이름: add
- 매개변수 목록: (int, int)
예시2
public int add(int a, int b) {
return a + b;
}
public double add(double a, double b) { // 허용됨: 시그니처가 다름
return a + b;
}
public int add(int a, int b, int c) { // 허용됨: 시그니처가 다름
return a + b + c;
}
위 코드에서는 3개의 add 메서드가 있는데, 각 메서드의 시그니처는 서로 다릅니다.
- add(int, int)
- add(double, double)
- add(int, int, int)
혹시 몰라서 매개변수와 메소드명이 같고 매개변수명만 다르게 해봤습니다.
public class Calculator {
public int add(int a, int b) {
return a + b;
}
public int add(int x, int y) { // 오류 발생: 시그니처가 동일함
return x + y;
}
}
오류가 발생합니다.
결론적으로 메서드 이름과 매개변수 타입으로 오버로딩이 된다.
이두개는 매우 시그니처해야된다.