코드 맵을 사용하여 종속성 매핑

이 문서에서는 코드 맵을 사용하여 코드 전체에서 종속성을 시각화하는 방법을 알아봅니다.

코드 맵이란?

Visual Studio에서 코드 맵을 사용하면 파일 및 코드 줄을 읽지 않고도 프로그램 코드가 어떻게 잘 맞는지 보다 빠르게 확인할 수 있습니다. 이러한 맵을 사용하면 코드의 구조 및 종속성, 업데이트 방법, 제안된 변경 비용 예측 등 코드에서 조직 및 관계를 확인할 수 있습니다.

Visual Studio에서 코드 맵을 사용하여 종속성을 보는 방법을 보여 주는 스크린샷

다음 언어로 코드에 대한 종속성을 매핑할 수 있습니다.

  • 솔루션 또는 어셈블리의 Visual C# 또는 Visual Basic(.dll 또는 .exe)

  • Visual C++ 프로젝트, 헤더 파일(.h 또는 #include), 또는 이진 파일의 네이티브 또는 관리형 C 또는 C++ 코드

  • Microsoft Dynamics AX용 .NET 모듈에서 만든 X++ 프로젝트 및 어셈블리

메모

C# 또는 Visual Basic 이외의 프로젝트의 경우 코드 맵을 시작하거나 기존 코드 맵에 항목을 추가하는 옵션은 더 적습니다. 예를 들어 C++ 프로젝트의 텍스트 편집기에서 개체를 마우스 오른쪽 단추로 클릭하고 코드 맵에 추가할 수 없습니다. 그러나 솔루션 탐색기, 클래스 뷰 및 개체 브라우저에서 개별 코드 요소 또는 파일을 끌어서 놓을 수 있습니다.

사전 요구 사항

Visual Studio에서 코드 맵을 만들려면 먼저 코드 맵 및 라이브 종속성 유효성 검사 구성 요소를 설치합니다.

코드 맵을 만들고 편집하려면 Visual Studio Enterprise 버전이 필요합니다. 그러나 Visual Studio Community 및 Professional 버전에서는 Enterprise 버전에서 생성된 다이어그램을 열 수 있지만 편집할 수는 없습니다.

메모

Visual Studio Enterprise에서 만든 맵을 Visual Studio Professional을 사용하는 다른 사용자와 공유하기 전에 지도의 모든 항목(예: 숨겨진 항목, 확장된 그룹 및 그룹 간 링크)이 표시되는지 확인합니다.

코드 맵 추가

빈 코드 맵을 만들고 어셈블리 참조, 파일 및 폴더를 포함하여 항목을 끌어다 놓거나 솔루션의 전체 또는 일부에 대한 코드 맵을 생성할 수 있습니다.

빈 코드 맵을 추가하려면 다음을 수행합니다.

  1. 솔루션 탐색기에서 최상위 솔루션 노드의 바로 가기 메뉴를 엽니다. 새 항목>를 선택합니다.

  2. 새 항목 추가 대화 상자의 설치됨 아래에서 일반 범주를 선택합니다.

  3. Directed Graph Document(.dgml) 템플릿을 선택한 다음 추가를 선택합니다.

    Tip

    이 템플릿은 사전순으로 표시되지 않을 수 있으므로 표시되지 않으면 템플릿 목록의 맨 아래로 스크롤합니다.

    솔루션의 솔루션 항목 폴더에 빈 맵이 나타납니다.

마찬가지로 아키텍처 새 코드 맵 또는 새 파일 파일을 선택하여 > 솔루션에 추가하지 않고새 코드 맵>파일을> 만들 수 있습니다.

더 알아보세요:

솔루션에 대한 코드 맵 생성

솔루션의 모든 종속성을 보려면:

  1. 메뉴 모음에서솔루션에 대한 코드 맵 생성>를 선택합니다. 코드를 마지막으로 빌드한 이후 변경되지 않은 경우 빌드하지 않고 솔루션에 대한 아키텍처> 생성 코드 맵을 대신 선택할 수 있습니다.

    솔루션에 대한 코드 맵 생성 명령을 보여 주는 스크린샷

    최상위 어셈블리와 해당 어셈블리 간의 집계된 링크를 보여 주는 맵이 생성됩니다. 집계 링크가 넓을수록 더 많은 종속성을 나타냅니다.

  2. 코드 맵 도구 모음의 범 례 단추를 사용하여 프로젝트 형식 아이콘(예: 테스트, 웹 및 전화 프로젝트), 코드 항목(예: 클래스, 메서드 및 속성) 및 관계 유형(예: 상속 원본, 구현 및 호출)의 목록을 표시하거나 숨깁니다.

    어셈블리의 최상위 종속성 그래프를 보여 주는 스크린샷

    이 예제 솔루션에는 솔루션 폴더(테스트 및 구성 요소), 테스트 프로젝트, 웹 프로젝트 및 어셈블리가 포함됩니다. 기본적으로 모든 포함 관계는 확장 및 축소할 수 있는 그룹으로 표시됩니다. Externals 그룹에는 플랫폼 종속성을 포함하여 솔루션 외부의 모든 항목이 포함됩니다. 외부 어셈블리는 사용되는 항목만 표시합니다. 기본적으로 시스템 기본 형식은 혼란을 줄이기 위해 맵에 숨겨집니다.

  3. 맵으로 드릴다운하려면 프로젝트 및 어셈블리를 나타내는 그룹을 확장합니다. Ctrl+A를 눌러 모든 노드를 선택한 다음 바로 가기 메뉴에서 [그룹], [확장]을 선택하여 모든 항목을 확장할 수 있습니다.

    코드 맵에서 확장된 모든 그룹을 보여 주는 스크린샷

  4. 그러나 대규모 솔루션에는 유용하지 않을 수 있습니다. 실제로 복잡한 솔루션의 경우 메모리 제한으로 인해 모든 그룹을 확장할 수 없게 될 수 있습니다. 대신 개별 노드 내부를 보려면 확장합니다. 마우스 포인터를 노드 위쪽으로 이동한 다음 단추가 나타나면 펼침 단추(아래쪽 화살표)를 클릭합니다.

    코드 맵에서 노드를 확장하는 방법을 보여 주는 스크린샷

    또는 항목을 선택한 다음 더하기 키(+)를 눌러 키보드를 사용합니다. 더 심층적인 수준의 코드를 탐색하려면 네임스페이스, 형식 및 멤버에 대해 동일한 작업을 수행합니다.

    Tip

    마우스, 키보드 및 터치를 사용하여 코드 맵을 사용하는 방법에 대한 자세한 내용은 코드 맵 찾아보기 및 다시 정렬을 참조하세요.

  5. 맵을 단순화하고 개별 파트에 집중하려면 코드 맵 도구 모음에서 필터 를 선택하고 관심 있는 노드 및 링크 유형만 선택합니다. 예를 들어 모든 솔루션 폴더 및 어셈블리 컨테이너를 숨길 수 있습니다.

    컨테이너를 필터링하여 맵을 간소화하는 방법을 보여 주는 스크린샷

    기본 솔루션 코드에 영향을 주지 않고 맵에서 개별 그룹 및 항목을 숨기거나 제거하여 지도를 간소화할 수도 있습니다.

  6. 항목 간의 관계를 보려면 지도에서 선택합니다. 링크의 색은 범 례 창에 표시된 관계 유형을 나타냅니다.

    솔루션 전체에서 종속성을 보는 방법을 보여 주는 스크린샷

    이 예제에서 자주색 링크는 호출이고 점선 링크는 참조이며 연한 파란색 링크는 필드 액세스입니다. 녹색 링크는 상속이거나 둘 이상의 관계 유형(또는 범주)을 나타내는 집계 링크일 수 있습니다.

    Tip

    녹색 링크가 표시되면 상속 관계만 있는 것은 아닐 수 있습니다. 메서드 호출도 있을 수 있지만 상속 관계에 의해 숨겨집니다. 특정 유형의 링크를 보려면 필터 창의 확인란을 사용하여 관심 없는 형식을 숨깁니다.

  7. 항목 또는 링크에 대한 자세한 내용을 보려면 도구 설명이 나타날 때까지 포인터를 위쪽으로 이동합니다. 코드 요소 또는 링크가 나타내는 범주의 세부 정보를 보여 줍니다.

    관계의 범주를 보여 주는 스크린샷.

  8. 집계 링크로 표시되는 항목 및 종속성을 검사하려면 먼저 링크를 선택한 다음 바로 가기 메뉴를 엽니다. 기여 링크 표시(또는 새 코드 맵에 기여 링크 표시)를 선택합니다. 이렇게 하면 링크의 양쪽 끝에서 그룹이 확장되고 링크에 참여하는 항목 및 종속성만 표시됩니다.

  9. 맵의 특정 부분에 집중하려면 관심 없는 항목을 계속 제거할 수 있습니다. 예를 들어 클래스 및 멤버 뷰를 자세히 살펴보려면 필터 창에서 모든 네임스페이스 노드를 필터링하기만 하면 됩니다 .

    클래스 및 멤버 수준으로 드릴다운하는 방법을 보여 주는 스크린샷

  10. 복잡한 솔루션 맵에 집중하는 또 다른 방법은 기존 맵에서 선택한 항목이 포함된 새 맵을 생성하는 것입니다. Ctrl 키를 누른 채 포커스할 항목을 선택하고 바로 가기 메뉴를 열고 선택 영역에서 새 그래프를 선택합니다.

    새 코드 맵에서 선택한 항목을 표시하는 방법을 보여 주는 스크린샷

  11. 포함하는 컨텍스트가 새 맵으로 전달됩니다. 필터 창을 사용하여 솔루션 폴더 및 표시하지 않으려는 다른 컨테이너 를 숨깁니다.

    보기를 간소화하기 위해 컨테이너를 필터링하는 방법을 보여 주는 스크린샷.

  12. 그룹을 확장하고 맵에서 항목을 선택하여 관계를 봅니다.

    관계를 볼 항목을 선택하는 것을 보여 주는 스크린샷.

또한 다음을 참조하세요.

종속성 보기

보류 중인 변경 내용이 있는 일부 파일에서 수행할 코드 검토가 있다고 가정합니다. 이러한 변경 내용의 종속성을 보려면 해당 파일에서 코드 맵을 만들 수 있습니다.

코드 맵의 종속성을 보여 주는 스크린샷

  1. 솔루션 탐색기, 클래스 뷰 또는 개체 브라우저에서 새 코드 맵 또는 기존 코드 맵으로 항목을 끌어옵니다. 항목에 대한 부모 계층 구조를 포함하려면 항목을 끌 때 Ctrl 키를 길게 누르거나 코드 맵 도구 모음에서 부모 포함 단추를 사용하여 기본 작업을 지정합니다. Windows 탐색기에서와 같이 Visual Studio 외부에서 어셈블리 파일을 끌 수도 있습니다.

    메모

    Windows Phone 또는 Microsoft Store와 같은 여러 앱에서 공유되는 프로젝트의 항목을 추가하면 해당 항목이 현재 활성 앱 프로젝트와 함께 지도에 표시됩니다. 컨텍스트를 다른 앱 프로젝트로 변경하고 공유 프로젝트에서 더 많은 항목을 추가하는 경우 해당 항목은 이제 새로 활성화된 앱 프로젝트와 함께 표시됩니다. 맵의 항목으로 수행하는 작업은 동일한 컨텍스트를 공유하는 항목에만 적용됩니다.

  2. 맵에는 포함된 어셈블리 내에서 선택한 항목이 표시됩니다.

    맵에서 항목을 그룹으로 보여 주는 스크린샷

  3. 항목을 탐색하려면 항목을 확장합니다. 항목 위에 마우스 포인터를 올린 다음 나타나는 아래쪽 화살표 아이콘을 클릭합니다.

    자식 항목을 추가하기 위한 화살표를 보여 주는 스크린샷

    모든 항목을 확장하려면 Ctrl+A를 사용하여 항목을 선택한 다음 지도의 바로 가기 메뉴를 열고 그룹>확장을 선택합니다. 그러나 모든 그룹을 확장하면 사용할 수 없는 맵 또는 메모리 문제가 발생하는 경우에는 이 옵션을 사용할 수 없습니다.

  4. 필요한 경우 클래스 및 멤버 수준까지 관심 있는 항목을 계속 확장합니다.

    클래스 및 멤버 수준으로 확장된 그룹을 보여 주는 스크린샷

    코드에 있지만 지도에 표시되지 않는 멤버를 보려면 그룹의 왼쪽 위 모서리에 있는 자식 다시 가져오기 아이콘자식 다시 가져오기 아이콘 [자식 다시 가져오기 아이콘]을 클릭합니다.

  5. 지도에 있는 항목과 관련된 항목을 더 보려면 항목을 선택하고 코드 맵 도구 모음에서 관련 항목 표시 를 선택한 다음 지도에 추가할 관련 항목의 유형을 선택합니다. 또는 하나 이상의 항목을 선택하고 바로 가기 메뉴를 연 다음 지도에 추가할 관련 항목 유형에 대한 표시 옵션을 선택합니다. 다음은 그 예입니다.

    어셈블리의 경우 다음을 선택합니다.

    Option Description
    참조하는 어셈블리 표시 이 어셈블리가 참조하는 어셈블리를 추가합니다. 외부 어셈블리는 외부 그룹에 표시됩니다.
    이를 참조하는 어셈블리 표시 이 어셈블리를 참조하는 어셈블리를 솔루션에 추가합니다.

    네임스페이스가 표시되지 않는 경우, 포함 어셈블리 표시를 선택하십시오.

    클래스 또는 인터페이스의 경우 다음을 선택합니다.

    Option Description
    기본 형식 표시 클래스의 경우 기본 클래스와 구현된 인터페이스를 추가합니다.

    인터페이스의 경우 기본 인터페이스를 추가합니다.
    파생 형식 표시 클래스의 경우 파생 클래스를 추가합니다.

    인터페이스의 경우 파생된 인터페이스와 구현 클래스 또는 구조체를 추가합니다.
    이 참조가 가리키는 형식 표시 이 클래스에서 사용하는 모든 클래스와 해당 멤버를 추가합니다.
    이를 참조하는 형식 표시 이 클래스를 사용하는 모든 클래스와 해당 멤버를 추가합니다.
    네임스페이스 포함 표시 부모 네임스페이스를 추가합니다.
    네임스페이스 및 어셈블리 포함 표시 부모 컨테이너 계층을 추가합니다.
    모든 기본 형식 표시 기본 클래스 또는 인터페이스 계층 구조를 재귀적으로 추가합니다.
    모든 파생 형식 표시 클래스의 경우 모든 파생 클래스를 재귀적으로 추가합니다.

    인터페이스의 경우 모든 파생 인터페이스를 추가하고 클래스 또는 구조체를 재귀적으로 구현합니다.

    메서드의 경우 다음을 선택합니다.

    Option Description
    이 호출 메서드 표시 이 메서드가 호출하는 메서드를 추가합니다.
    이 필드가 참조하는 항목 표시 이 메서드가 참조하는 필드를 추가합니다.
    포함 형식 표시 부모 형식을 추가합니다.
    포함 형식, 네임스페이스 및 어셈블리 표시 부모 컨테이너 계층을 추가합니다.
    오버라이드된 메서드 표시 다른 메서드를 재정의하거나 인터페이스의 메서드를 구현하는 메서드의 경우 재정의되는 기본 클래스에 모든 추상 메서드 또는 가상 메서드를 추가하고(있는 경우) 구현되는 인터페이스의 메서드를 추가합니다.

    필드 또는 속성의 경우 다음을 선택합니다.

    Option Description
    포함 형식 표시 부모 형식을 추가합니다.
    포함 형식, 네임스페이스 및 어셈블리 표시 부모 컨테이너 계층을 추가합니다.

    메서드를 표시하는 명령을 보여 주는 스크린샷.

  6. 맵에 관계가 표시됩니다. 이 예제에서 맵은 Find 메서드가 호출하는 메서드들과 그 메서드들이 솔루션 내 또는 외부에 위치한 곳을 보여 줍니다.

    코드 맵의 특정 종속성을 보여 주는 스크린샷

  7. 맵을 단순화하고 개별 파트에 집중하려면 코드 맵 도구 모음에서 필터 를 선택하고 관심 있는 노드 및 링크 유형만 선택합니다. 예를 들어 솔루션 폴더, 어셈블리 및 네임스페이스 표시를 해제합니다.

    표시를 간소화하기 위한 필터 옵션을 보여 주는 스크린샷.