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...에서 생성하시기 바랍니다.


블로그 이미지

도로락

IT, 프로그래밍, 컴퓨터 활용 정보 등을 위한 블로그

댓글을 달아 주세요! 질문 환영합니다!