자바 시그니처? 간단하게 알아보자
자바 입문 단계에서는 마주칠 일이 없는 단어가 시그니처다.
하지만 스프링을 배우면 각종 영역에서 signature라는 메서드를 콜하는 경우도 종종 있고, 메서드 시그니처라는 용어도 가끔씩 볼 수 있다.
대체 무엇이길래 은근히 쓰이는 것일까?
간단하게 알아봤다.
signature.
서명을 뜻한다.
자바에서는 서명을 하는 의미를 가져와서 시그니처라고 부른다.
서명은 무엇인가?
공통된 여러 필적 혹은 그에 준하는 것을 비교하고 대조하여 동일성을 입증하는 방식이다.
자바에서는 동일성을 입증한다, 그 부분에 해당하는 의미를 따와서 사용한다.
자바에서 시그니처란 특정한 것을 구분하는 데 필요한 요소의 집합을 뜻한다.
그렇다면 메서드 간 서로 같다는 것을 어떻게 증명하는가?
간단하게, 식별자와 매개변수가 동일하면 같은 메서드다.
메서드 시그니처란 즉, 메서드의 동일성을 입증하는 데 필요한 요소의 집합이다.
메서드 식별자, 메서드 매개변수가 그것이다.
예시를 보자.
public String hanzo(Bow bow, Mind oneshotonekill) {
return "carry";
}
public String hanzo(Mind troll) {
return "defeat";
}
hanzo라는 메서드가 존재한다. 매개변수로 한쪽은 활과 저격수의 마음가짐을, 다른 쪽은 트롤의 마음가짐만 받는다.
두 한조는 같은 한조인가? 아니다. 절대로 아니다.(!!)
무엇으로 두 한조가 다른 한조임을 알았는가?
매개변수가 다르기 때문에 한조라는 껍데기를 쓰고 있지만, 다른 한조라는 것을 알 수 있다.
또한, 매개변수 개수만 다르고 메서드 식별자는 같은 방식은 오버로딩이라고 부른다.
다른 예시를 보자.
public String mercy(Mind heroneverdie) {
return "revive";
}
public String ana(Mind goherouastrong) {
return "powerful buff";
}
이번에는 메서드 매개변수는 동일하지만 메서드 식별자는 다르다.
따져볼 것도 없이 메서드 식별자가 다르니 서로 다른 메서드다.
시그니처는 다음 예시를 보면 된다.
public String genji(Weapon keyboard, Mind carry) {
return "defeat";
}
public String genji(Weapon keyboard, Mind carry) {
return "defeat";
}
시그니처는 식별자, 매개변수를 확인하여 서로 다른 메서드가 같은 메서드인지 확인하는 것이다.
매개변수도, 식별자도 동일하니 두 메서드는 동일한 메서드다.
메서드 시그니처가 동일하다고 볼 수 있는 것이다.
Spring AOP에서 확인가능한 getSignature() 메서드도 여기서 따왔다.
메서드의 식별자와 매개변수가 무엇인지 가져온다는 뜻이다.
시그니처가 무엇인가?
식별자, 매개변수 두 가지를 합해서 부르는 명칭이다.
자바의 메서드 시그니처 뿐 아니라, 각종 라이브러리에서 사용하는 시그니처라는 용어는 저 두 가지 값을 가져온다는 뜻으로 해석하면 된다.
끝!