Intellij로 코드 분석하기 #UML(Diagram)

2020. 9. 8. 14:49 IDE Tool/IntelliJ IDEA

Spring Core를 공부해보려고 Spring source를 받아서 분석하기 위해 어떻게 해야할지 고민했다. 부끄럽지만 개발 경력 3년동안 코드 분석을 처음 해 보는 것 같다. 남에 코드를 많이 읽어보라는 말도 많고, 나름 Spring을 자주 사용했는데 Core 소스나 구조가 궁금해져서 분석을 시작했다. 며칠 동안 어떻게 분석했는지 간단하게 정리하려 한다.


개발환경

  • Mac OS El Capitan
  • Intellij 15
  • Java8
내 개발 환경은 위와 같지만 Intellij를 사용한다면 대부분 비슷할 것이다. 때문에 단축키는 설명하지 않는다.

상황
  AnnotationConfigApplicationContext라는 클래스가 있는데, 이 클래스는 @Annotation 기반 설정을 토대로 IoC를 관리해주는 클래스이다. 어떤 클래스 구조를 가지고 있는지 확인하기 위해 Intellij에 있는 UML기능을 사용해서 구조를 파악할 것이다.
참고로 이 클래스가 어떤 일을 하는지는 정확히 몰라도 된다. 이번 포스팅은 그냥 Intellij에 유용한 기능인 UML을 어떻게 사용하고 이를 사용해 어떻게 코드를 분석할지만 알기 위해서니까.

클래스 찾기
  Intellij Search Everywhere라는 기능을 사용해서 AnnotaionConfigApplicationContext를 연다.


Searh Everywhere 단축키는 위 이미지 중앙 첫번째로 보인다. 나 같은 경우는 Shift키를 2번 누르면 나온다.


  Search Everywhere를 사용해 AnnotaionConfigApplicationContext을 찾은 이미지이다. 현재 프로젝트 내에 의존되어 있는 클래스명을 알고 있다면 쉽게 찾을 수 있다.


클래스 의존 UML

  현재 찾은 클래스에 UML을 자동으로 만들 수 있는데 이 기능이 Intellij에 UML(또는 Diagram이라고도 한다.)이다.

현재는 AnnotaionConfigApplicationContext 클래스에 UML을 보기 위해 설명한다.



클래스명 > 오른쪽 마우스 클릭 > Diagrams > Show Diagram을 선택한다.

  꼭 클래스를 열어 클래스명을 선택해서 Diagram을 생성할 필요 없이 클래스 파일 자체도 Diagram 선택이 가능하다. 심지어 Maven Dependency를 Diagram으로 생성도 가능하다.(아주 좋음)



  그럼 위 이미지와 같이 AnnotaionConfigApplicationContext 클래스에 의존된 부모 클래스 또는 인터페이스에 UML이 생성되어 보여진다. 참고로 선택한 AnnotaionConfigApplicationContext 클래스에 부모는 보이지만 자식은 기본으로 보이지 않는다. 볼 수 있는 방법은 아래에서 설명할 것이다. 여기까지가 기본적인 UML을 생성하고 보는 방법이다.


UML(Diagram) 사용법

# 메뉴 설명



UML을 생성하면 Editor 상단에 위와 같은 메뉴가 나오는데 순서대로 설명하겠다. (왼쪽부터 오른쪽으로 설명)

  • 클래스 Field를 보여준다.

  • 클래스 생성자를 보여준다.

  • 클래스 메소드를 보여준다.

  • 클래스 property를 보여준다.

  • 클래스에 Inner Class를 보여준다.

  • 접근제한자를 기준으로 필터링된 결과(클래스)를 보여준다.

  • 클래스 종류(전체, 테스트 클래스, 현재 프로젝트 클래스를 제외한 클래스 등등)를 기준으로 필터링된 결과(클래스)를 보여준다.


  • 클래스간 의존 관계를 보여준다.


# 부모 & 자식 의존 관계 보여주기


  특정 클래스에 부모나 자식 관계를 추가해서 보고 싶다면 해당하는 클래스를 오른쪽 마우스 클릭 > Show Implementations(자식) 또는 Show Parents(부모) 를 선택해 의존 클래스를 선택하면 현재 UML 화면에 추가된다.


# 의존 클래스 추가하기

  UML(Diagram)을 생성하면 기본적으로 해당 클래스에 부모 클래스 또는 인터페이스만 보이는게 기본이다. 하지만 코드를 분석하다보면 부모 자식 관계가 아닌 의존되는 클래스에 UML을 보고 싶은 경우가 있다. 이 경우에 그 의존되는 클래스를 현재 UML에 추가하면 자동으로 의존 관계를 보여주는 기능을 알아볼 것이다.



화면에 오른쪽 마우스 클릭 > Add Class to Diagram... 

선택하면 앞에 Search Everywhere 와 같은 창이 뜨는데 동일하게 클래스 조회해서 추가하면 된다.

출처 : https://blog.woniper.net/291?category=537962