eclipse 특정 메서드 호출하여 사용하는 클래스 위치 알아내는 방법
남이 짠 코드나 특정 라이브러리, 오래된 레거시 코드, 동료의 코드 등 여러가지 소스를 분석할때 메서드가 어떻게 구현되어있는지 확인할때 Ctrl 버튼을 누른 상태에서 메서드를 클릭하여 들어가곤 합니다.
그런데 반대로 특정 메서드가 있고 이메서드를 호출하여 사용하는 대상이 누구일지 궁금할때가 있습니다. 예를 들어
StringUtils
라는 클래스의 isEmpty()
라는 메서드가 있는데 이 메서드를 사용하는(호출하는) 대상들이 궁금한 것입니다.우리의 이클립스는 그 대상을 추적해주는 기능이 있습니다.
예를 들어 다음과 같이 클래스 세개가 있다고 해보죠. 서로의 메서드를 호출하는 관계에 있습니다. 실무에서는 클래스가 아주 복잡하게 따로 분리되어 있을것입니다. 코드를 분석하기 어렵게 말이죠.
public class StringUtils {
public static boolean isEmpty(String str) {
return str == null || "".equals(str) ? true : false;
}
}
class ClassOne {
public void methodA() {
StringUtils.isEmpty("abc");
}
public void methodB() {
methodA();
}
}
class ClassTwo {
public void methodC() {
ClassOne co = new ClassOne();
co.methodA();
}
} |
cs |
보통 이럴때 코드를 분석하는 방법은 호출되는 순서대로 타고타고 들어가면서 분석하는 방법입니다. 그러나 사람은 망각의 동물이기에 엇? 이걸 호출하는 쪽이 어디었지? 하고 잊어버리기가 쉽습니다.
이럴때 다음의 기능을 사용합니다. 만약
isEmpty()
메서드를 호출하는 대상이 궁금하다면 isEmpty
에 커서를 올리고(블록 씌우지 않아도 됨) Ctrl + Alt + H
단축키를 줍니다.혹은 마우스 우클릭 후 Open Call Hierarchy 를 클릭해도 됩니다.
Call Hierarchy 뷰에서 콜스택과 같은 순서대로 보여집니다. 즉 최 상단이 현재 메서드이며 가장 하단이 현재 메서드를 호출하게된 시발점입니다. 맨 마지막에
methodB()
와 methodC()
는 같은 들여쓰기 레벨로 있는데, 이경우 methodA()
를 methodB()
와 methodC()
두곳에서 호출하여 사용하고 있다는 뜻입니다.만약 Call Hierarchy 뷰가 없다면 이클립스 상단 Window > Show View > Other...에서 생성하시기 바랍니다.
'이클립스[Elipse]' 카테고리의 다른 글
[이클립스] Eclipse에서 Dynamic Web Project로 WAR 파일 생성하기 (0) | 2019.07.30 |
---|---|
[이클립스] eclipse에서 들여쓰기시 tab 대신 공백(space)으로 입력되도록 설정 변경하기 (0) | 2019.07.26 |
[이클립스] 웹 프로젝트에서 HttpServlet cannot be resolved to a type 오류시 해결법 (3) | 2019.07.13 |
[이클립스] 이클립스로 Servlet(서블릿) 클래스 초 간단하게 생성하는 방법 (0) | 2019.07.13 |
[이클립스] Eclipse Neon 이후 버전에서 Enhanced Class Decompiler 사용시 디컴파일 되지 않는 경우 (2) | 2019.06.19 |