ReSharper C++ 기능

ReSharper C++는 C++ 개발자를 위해 Visual Studio를 더욱 향상된 IDE로 구현한 것으로, 즉석 코드 분석, 빠른 수정, 강력한 검색 및 탐색, 스마트 코드 완성, 리팩토링, 다양한 코드 생성 옵션을 비롯해 일상 작업의 생산성을 높이는 기타 여러 기능을 제공합니다.

코드 분석

ReSharper C++는 Visual Studio 에디터에서 프로젝트를 여는 즉시 코드 분석을 시작하고, 편집하는 과정에서 파일을 계속해서 재분석하여 컴파일하기 전에 가능한 오류와 문제를 미리 감지합니다.

빠른 수정

40가지가 넘는 빠른 수정 기능을 이용해 감지된 여러 가지의 코드 문제를 즉시 해결할 수 있습니다. 코드 왼쪽에 전구가 표시될 때마다 Alt+Enter를 누르면 제안된 빠른 수정이 적용됩니다.

예를 들어, 초기화되지 않은 변수가 감지되면 기본값을 사용해 즉시 초기화할 수 있습니다. 그 외에 빠른 수정을 사용하면 누락된 #include 지시문을 추가하거나, 특정 구문 또는 더 큰 범위(파일이나 전체 솔루션 등)에서 중복 한정자를 제거할 수 있습니다.

ReSharper C++에서 사용 위치로부터 코드 생성

사용 위치에서 생성

빠른 수정 기능의 또 다른 이점은 클래스, 메소드, 변수, 속성 및 필드를 선언하기 전에 사용할 수 있다는 것입니다. ReSharper C++가 선언되지 않은 심볼을 탐지하면, 사용 위치를 기반으로 해당 심볼 선언을 생성할 수 있도록 빠른 수정을 제안합니다.

코드 문제 검색

코드 문제 검색

파일, 프로젝트, 솔루션과 같은 주어진 범위에서 탐지된 모든 코드 문제를 전용 도구 창에 표시하도록 ReSharper C++를 설정할 수 있습니다.

Find Code Issues(코드 문제 검색)는 백그라운드에서 작동하므로 ReSharper C++가 분석을 실행하여 Inspection Results(검사 결과) 도구 창을 생성하는 동안 사용자는 계속해서 코드를 편집하거나 탐색할 수 있습니다.

결과가 준비되는 즉시 다양한 기준을 사용해 결과를 그룹 지정하거 특정 문제 유형을 검색해 찾을 수 있습니다. Find Code Issues 결과의 보고서를 저장하고 로드할 수도 있습니다.

명령줄에서 C++ 코드 분석

명령줄에서 C++ 코드 분석

ReSharper C++ 코드 검사는 Visual Studio 외부에서 ReSharper 검사를 실행할 수 있는 무료 명령줄 도구인 InspectCode로도 이용 가능합니다.

InspectCode를 사용하려면 명령줄 도구 패키지를 다운로드하여 압축을 풀고 솔루션 파일을 매개변수로 사용해서 InspectCode.exe를 실행하세요. InspectCode 사용 방법을 자세히 알아보려면 이 문서를 참조하세요.

Clang-Tidy 설정

Clang-Tidy

ReSharper C++가 Clang 컴파일러 기반의 강력한 오픈소스 코드 분석 도구인 Clang-Tidy와 완벽하게 통합됩니다. 이 통합으로 코드 검사 및 빠른 수정을 이용하실 수 있습니다.

리팩토링

ReSharper C ++는 Rename(이름 변경), Extract Method(메소드 추출), Change Signature(시그너처 변경) 등 완벽한 기능의 주요 리팩토링을 몇 가지 제공합니다. 또한 단 하나의 단축키로 지역 코드를 변환할 수 있는 수십 가지 컨텍스트 액션을 제공합니다.

ReSharper C++의 이름 변경 리팩토링

이름 변경

클래스 또는 매크로의 이름을 수동으로 수정하면 많은 문제가 발생할 수 있습니다. 이러한 이유로 ReSharper C++는 Rename(이름 변경) 리팩토링이 실행되면 모든 필요한 검사 작업을 대신 진행해 드립니다.

필요하고 적절한 변경만 수행되도록 수동으로 해결할 수 있는 충돌 목록이 표시되거나 모든 수정이 자동으로 수행됩니다.

Rename 리팩토링은 실제 적용된 코드 심볼에 따라 관련 파일(소스 파일과 헤더 파일 모두)의 이름과 주석 및 문서 내 관련 텍스트의 이름을 변경할 뿐만 아니라 #include 지시문의 사용 위치도 업데이트합니다.

ReSharper C++의 메소드 추출 리팩토링

메소드 추출

Extract Method(메소드 추출) 리팩토링을 사용하면 선택한 코드 조각을 기반으로 새 메소드를 만들 수 있습니다. ReSharper는 선택된 코드 블록을 분석하여 메소드 매개변수로 변환 가능하거나 반환 값을 나타내는 변수를 탐지합니다.

C++에 지원되는 시그너처 변경 리팩토링

시그너처 변경

Change Signature(시그너처 변경) 리팩토링을 사용하면 함수의 시그니처에 하나 이상의 변경 내용을 적용할 수 있습니다. 함수의 모든 사용 위치, 구현, 재정의도 함께 업데이트됩니다.

C++에 지원되는 변수 인라인화 리팩토링

변수 삽입 및 변수 인라인화

Introduce Variable(변수 삽입) 리팩토링을 사용하면 선택한 표현식을 기반으로 새 지역 변수를 만들고 표현식으로 초기화한 다음, 코드 내 해당 표현식의 모든 사용 위치를 새로 삽입된 변수의 참조로 바꿀 수 있습니다.

이와 달리 Inline Variable(변수 인라인화)은 주어진 변수 또는 지역 상수의 모든 사용 위치를 이니셜라이저로 바꿉니다.

ReSharper C++의 필드 삽입 리팩토링

필드 삽입

Introduce Field(필드 삽입) 리팩토링을 사용하면 선택된 표현식을 기반으로 새로운 필드를 생성하고 자체 이니셜라이저 또는 생성자에서 원래 표현식을 해당 필드에 할당하여 사용 위치를 교체할 수 있습니다.

네임스페이스 별칭 삽입

Introduce Namespace Alias(네임스페이스 별칭 삽입) 리팩토링은 깊이 중첩된 네임스페이스의 바로가기 이름을 정의하는 데 도움이 됩니다.

리팩토링을 실행하는 즉시 리팩토링에서 네임스페이스 별칭을 삽입할 범위를 정의하도록 제안합니다.

ReSharper C++의 typedef 삽입 및 typedef 인라인화 리팩토링

typedef 삽입 및 typedef 인라인화

Introduce typedef(typedef 삽입) 리팩토링을 사용하면 선택한 데이터 유형의 typedef를 신속하게 생성하고 이 데이터 유형 및 모든 사용 위치를 새로 생성한 typedef로 교체할 수 있습니다.

Inline typedef 리펙토링은 기존 typedef를 실제 적용된 데이터 유형으로 바꾸는 반대 작업을 수행합니다.

컨텍스트 액션

리팩토링 외에도 ReSharper C++는 컨텍스트 액션 모음을 제공합니다. 이러한 액션은 일반적으로 대체 구문 옵션 간에 전환할 수 있는 지역 코드 변환 기능입니다. 빠른 수정과 마찬가지로 Alt + Enter를 누르면 사용할 수 있습니다.

예를 들어, auto를 명시적 유형으로 빠르게 교체하거나 유형을 auto로 교체할 수 있습니다. 기타 컨텍스트 액션은 중첩된 if 문을 병합하고, 열거형을 전환할 때 누락된 case 문을 생성하고, 매크로 호출이나 typedef 등을 대체하는 데 도움이 됩니다.

코딩 지원

ReSharper C++는 Visual Studio의 구문 강조 및 구조적 코드 조각 일치 방법을 확장하고 자체적인 코드 완성 구현을 제공하며 모든 C++ 심볼에 대해 사용 가능한 문서를 시각화할 수 있도록 도와줍니다.

종료점 자동 강조 표시

구문 및 구조 강조 표시

ReSharper C++는 사용자 솔루션의 *.c, *.cc, *.cxx, *.cpp, *.h, *.hpp 파일을 인식하고 이러한 파일의 소스 코드를 사용자가 언제든지 수정할 수 있는 색 구성표에 따라 강조 표시합니다.

또한 ReSharper C++는 한 쌍의 항목 중 하나에 캐럿을 배치할 때 그 대응하는 다양한 항목을 강조 표시합니다(예: printf 함수 호출에서 대응하는 구분자, 매크로 또는 서식 지정자 및 인수 등).

함수, 루프, switch 문(return, throw, break 등)의 종료점 중 하나에 캐럿을 놓으면 ReSharper C++에서 다른 모든 함수 또는 루프의 종료점을 자동으로 강조 표시합니다.

현재 파일에 포함되지 않은 C++ 심볼 자동 완성

코드 완성

C++ 파일에서 코드를 작성할 때 코드 완성 기능을 사용할 수 있습니다. 이 기능은 다른 옵션 중에서도 코드 생성 옵션을 제시합니다.

코드 완성은 현재 파일에 아직 포함되지 않은 심볼을 제안할 수도 있습니다. 완성 목록에서 이와 같은 심볼을 선택하면 해당하는 #include 지시문이 자동으로 추가됩니다.

문서 요약

Quick Documentation(빠른 문서) 팝업은 Doxygen 주석 블록을 기반으로 하는 문서를 표시하지만 심볼 정의로 이동하지 않아도 됩니다. 간단히 기본 단축키에서 Ctrl+Shift+F1을 누르기만 하세요.

Quick Documentation은 심볼에 해당하는 Doxygen 문서가 없는 경우에도 심볼의 시그니처를 표시합니다.

또한 ReSharper C++는 C++ 코드 요소에서 구문이 강조 표시된 풍부한 툴팁을 보여줍니다. 툴팁에는 함수, 변수 유형, 문서가 나와 있습니다.

C# 스타일의 XML 문서 주석은 C++ 심볼에 사용되기도 합니다. ReSharper C++는 이러한 주석을 Quick Documentation 팝업과 빠른 정보 툴팁에서 올바르게 표시합니다.

C++/CLI

C++/CLI 지원 Ultimate

C++/CLI는 관리형 및 기본 코드 간의 간편한 상호 운용성을 위해 Microsoft에서 제공하는 C++ 언어 확장 지원 모음입니다. ReSharper는 관리형 언어 및 C++ 모두를 확장 지원하기 때문에 C++/CLI 코드 작성에서도 당연히 도움을 드립니다.

순수한 C++ 코드에서와 마찬가지로 C++/CLI 코드에서도 동일한 리팩토링 및 인텐션 액션을 모두 이용할 수 있습니다. 또한 C# 및 C++/CLI의 세계를 탐색해 볼 수 있는 기능도 있습니다.

C++/CLI 지원을 이용하려면 ReSharper Ultimate을 구독하고 ReSharper 제품을 사용 설정해야 합니다. 자세한 내용은 ReSharper C++의 C++/CLI 지원을 참조하세요.

ReSharper C++를 사용하면 소스 코드를 원하는 대로 탐색하기가 훨씬 쉬워집니다. 간단한 단축키를 사용하여 선언, 멤버, 메소드 호출 또는 상속 계층 구조의 멤버를 검색해 보세요.

ReSharper C++의 다음으로 이동 메뉴

컨텍스트 탐색

별도의 선언과 정의가 있는 모든 심볼의 경우 ReSharper C++는 Navigation to declaration/definition(선언/정의로 이동) 아이콘(Navigate to declaration/definition icon in ReSharper C++)을 왼쪽에 표시합니다. 아이콘을 클릭하거나 Ctrl+B를 누르면 선언과 해당 정의 사이를 빠르게 전환할 수 있습니다.

그 외에 ReSharper C++의 컨텍스트 기반 탐색 옵션에는 선택한 심볼에서 해당 심볼의 사용 위치, 기본 심볼 또는 파생 심볼로 이동하는 것도 있습니다.

ReSharper C++의 컨텍스트 기반 탐색

어디로든 이동

ReSharper C++는 Go to File(파일로 이동), Go to Symbol(심볼로 이동), Go to File Member(파일 멤버로 이동), Go to Everything(모든 항목으로 이동)을 포함하여 컨텍스트 기반의 탐색 명령어 모음을 제공합니다.

이 모든 명령어는 lowerCamelCase 기반 검색 및 경로별 필터링을 지원합니다. 예를 들어, Go to Everything 팝업에 fc movie를 입력하면 이름에 movie라는 문자열이 있고 FollowerC 프로젝트 또는 FollowerConstants 네임스페이스(둘 다 fc와 일치)에 속하는 파일 및 파일 멤버 목록이 반환됩니다.

계층 구조 시각화

ReSharper C++는 특정 유형이 속한 상속 계층 구조의 개요를 제공합니다. 선택한 유형의 기본 유형과 상속자를 모두 한 번의 클릭으로 확인할 수 있습니다.

또한 ReSharper C++에는 #include 지시문을 통해 삽입된 종속 항목을 시각화하고 파악하는 데 도움이 되는 계층 구조 뷰가 제공됩니다.

ReSharper C++로 심볼의 사용 위치 검색

사용 위치 검색

Find Usages(사용 위치 검색)를 사용하여 사용자 솔루션의 C++ 코드에서 특정 심볼의 모든 참조를 검색해 보세요.

검색이 완료되는 즉시, 발견된 사용 위치가 그룹 지정 및 필터링 옵션을 비롯해 미리보기 창을 갖춘 도구 창에 표시됩니다.

C++의 파일 구조

파일 구조

ReSharper C++를 사용하면 대규모 파일에서 탐색 작업을 크게 간소화하는 File Structure(파일 구조) 창을 사용하여 현재 문서의 구조를 볼 수 있습니다.

다른 에디터 탭으로 전환하면 도구 창에 해당 파일의 구조가 표시됩니다.

ReSharper C++의 To-do 탐색기

To-do 탐색기

To-do Explorer(To-do 탐색기) 도구 창을 사용하면 3가지 To-do 패턴(Bug(버그), ToDo, Not Implemented(구현되지 않음)) 및 설정하려는 사용자 지정 패턴 중 하나를 포함하는 주석을 확인하고 그룹 지정하고 필터링할 수 있습니다.

ReSharper Ultimate 전체 라이선스를 사용하고 다국어 솔루션을 가지고 있는 경우 To-do Explorer는 지원되는 모든 언어(C#, VB.NET, C++, JavaScript, XAML, HTML 등)에서 To-do 항목을 수집합니다.

코드 생성

ReSharper C++는 상용구 코드를 생성하는 다양한 방법을 제공합니다. 심볼의 기존 사용 위치에 따라 심볼을 선언하고 정의하는 것 외에, 코드 베이스에 공통적으로 필요한 유형 멤버, 주변 코드 블록, 코드 조각을 생성할 수도 있습니다.

ReSharper C++의 코드 생성 팝업

공통 코드 생성

ReSharper C++는 누락된 멤버, 재정의 멤버, 동등 또는 관계 연산자, 기존 선언에 따른 정의, 해시 및 스왑 함수 및 생성자를 빠르게 생성할 수 있는 방법을 제공합니다.

간단히 텍스트 에디터에서 Alt+Ins를 눌러 Generate 메뉴를 실행하여 사용 가능한 모든 옵션을 확인해 보세요.

ReSharper C++의 둘러싸기 템플릿

코드 및 파일 템플릿

ReSharper C++에는 29가지의 사용자 지정 가능한 템플릿이 제공됩니다. 그 중 일부는 일반 코드 조각이고 다른 일부는 특별히 코드 선택을 둘러싸는 데 사용됩니다.

파일 템플릿도 사용하고 만들 수 있습니다. Ctrl+Alt+Ins를 누르면 작업 중인 프로젝트에 클래스를 빠르게 추가할 수 있습니다.

코드 스타일 지원

ReSharper C++를 사용하면 코드 서식 지정 도구가 사용자의 기존 코드를 학습하므로 자신의 서식 지정 및 코드 스타일 기본 설정을 팀원들과 공유할 수 있습니다.

ReSharper C++의 코드 스타일 지원

코드 서식 지정 도구

ReSharper C++를 사용하면 특정 솔루션에서 작업할 때 사용자가 즐겨 사용하는 코드 서식 지정 규칙을 구성하고 적용할 수 있습니다.

사용 가능한 모든 코드 서식 옵션을 샅샅이 파헤치는 대신 코드 블록을 선택하고 이 특정 블록에 적용할 수 있는 옵션만 구성할 수 있습니다.

기본 포인터 이니셜라이저의 코드 스타일 설정

코드 스타일 설정

전체 팀에서 일관된 코드 스타일을 유지하기 위해 서식 및 이름 지정 기본 설정을 설정 파일에 저장하고 팀원 간에 공유할 수 있습니다.

또한 ReSharper C++에서는 팀 코딩 표준의 다른 부분(예: 수정자의 순서, 포인터 이니셜라이저의 기본값 등)을 정의할 수도 있습니다. 예를 들어 기본 이니셜라이저 스타일로 0, nullptr 또는 NULL을 지정할 수 있으며, 이러한 사용자의 선택은 ReSharper C++가 새로운 이니셜라이저를 사용자 대신 생성할 때 준수됩니다.

ReSharper Options(ReSharper 옵션) | Code Editing(코드 편집) | C++ | Naming Style(이름 지정 스타일)을 사용하여 STL, Google, LLVM, CamelCase 또는 Microsoft 등 사전 정의된 C++ 이름 지정 스타일 중 하나를 선택해 보세요.

코드 스타일 탐지

서식 지정 설정 탐지

기존 코드에서 서식 지정 설정을 간단히 탐지하여 사용자 지정하는 것이 훨씬 간편한 경우가 종종 있습니다. ReSharper | Edit(편집) | Detect formatting settings(서식 지정 설정 탐지) 메뉴를 사용하여 ReSharper가 코드 서식 지정 설정을 탐지하도록 설정해 보세요. 탐지된 값은 도구 창에 표시되므로 컴퓨터에서 검토하고 ReSharper 설정에 적용할 수 있습니다. 또는 해당 값을 팀 공유 설정 계층에 저장하여 팀의 다른 개발자가 현재 솔루션을 열 때 동일한 코드 서식 지정 구성을 갖도록 할 수 있습니다.

자세히 알아보기

유닛 테스트

Visual Studio 통합 유닛 테스트 러너는 Google Test, Boost.Test, Catch, Doctest 프레임워크를 지원합니다.

유닛 테스트 러너

ReSharper C++는 Google Test, Boost.Test, Catch, Doctest 프레임워크를 지원하는 Visual Studio의 유닛 테스트 러너를 제공합니다.

이에 따라 유닛 테스트를 실행하고 디버그할 수 있을 뿐만 아니라 Alt+Enter로 실행되는 컨텍스트 메뉴를 통해 텍스트 에디터에서 바로 다른 세션에 테스트를 추가할 수 있습니다.

ReSharper C++에는 Unit Test Explorer(유닛 테스트 탐색기)Unit Test Sessions(유닛 테스트 세션 ) 도구 창이 제공되어 유닛 테스트를 확인, 그룹 지정, 실행하고 유닛 테스트 세션을 생성하고 관리할 수 있습니다.

Unreal Engine

Unreal Engine을 기반으로 게임을 제작 중인 경우 ReSharper C++의 특별한 Unreal Engine 4 지원을 활용해 보세요.

UE4 이름 지정 규칙

UE4 이름 지정 규칙

ReSharper C++는 Introduce Variable(변수 삽입) 및 Rename(이름 변경) 리팩토링, 게터 및 세터용 코드 생성 등 모든 액션에 UE4 이름 지정 규칙을 적용합니다. 또한 코드 베이스에서 사용되는 이름을 계속 추적하고 일관성 없는 UE4 이름 지정에 관한 검사를 실행하여 UE4 이름 지정 규칙과 일치하지 않는 항목을 강조 표시합니다.

자세히 알아보기

UE4 분석

UE4 코드 분석

또한, UE4에 기반한 코드, 특히 누락되거나 잘못 설정된 UE4 리플렉션 매크로를 대상으로 하는 코드에 대해 몇몇 코드 분석 검사를 사용할 수 있습니다.

  • UCLASS 선언은 UObject 또는 여기서 파생된 클래스를 공개적으로 상속해야 합니다.
  • UCLASS로 표시된 클래스는 UObject에서 파생된 한 개의 클래스만 상속하거나 UObject를 직접 상속해야 합니다.
  • UCLASS는 클래스, USTRUCT은 구조체여야 합니다.
  • UInterface는 비어 있어야 합니다.
  • UE4 클래스/인터페이스/구조체 선언에서 UCLASS/UINTERFACE/USTRUCT 매크로 호출이 누락되면 안 됩니다.
  • UE4 클래스는 다른 클래스 안에서 선언하면 안 됩니다.
  • 선언 전 UPROPERTY/UFUNCTION 매크로 호출은 효력이 없습니다.
  • uproperty가 아닌 멤버에 보관된 객체는 언제든 가비지 수집될 수 있습니다.
UE4 리플렉션 지정자 코드 완성

리플렉션 지정자에 코드 완성 지원

ReSharper C++는 Unreal Engine 리플렉션 매크로로 쉽게 작업할 수 있도록 리플렉션 매크로에 있는 리플렉션 지정자에 코드 완성을 제공합니다.

UE4 리플렉션 지정자 설명서

리플렉션 지정자에 대한 코드 설명서

UE4 리플렉션 지정자에 대한 기본 제공 설명서는 캐럿이 지정자에 위치할 때 빠른 설명서 팝업 창(Ctrl+Q)에 표시됩니다.

RPC 탐색

UE4 원격 프로시저 호출 지원

ReSharper C++는 UFUNCTION 선언문의 Client, Server 또는 NetMulticast 키워드로 RPC를 식별합니다. 이러한 함수에서 ReSharper C++는 _Implementation 함수가 생성되어야 하고 WithValidation이 설정된 경우 _Validate 함수도 필요하다는 사실을 인지하고 둘 다 누락된 경우 둘 다 생성하고 하나만 누락된 경우 하나만 생성합니다.

정의로 이동하면 두 함수(_Validate_Implementation)가 제안됩니다. 또한 이러한 옵션은 Alt+Enter로 실행되는 메뉴에서 'Related UE4 functions'(관련 UE4 함수)로 제공되기도 합니다.

자세히 알아보기

UE4의 생성된 헤더 검사

자동 가져오기 및 생성된 헤더

사용자가 현재 범위에서 사용할 수 없는 심볼을 사용하면 ReSharper C++에서 빨간색으로 강조 표시하고 가능한 경우 누락된 #include를 추가하도록 제안합니다. 헤더 파일에 #include가 없으면 include 목록의 마지막 항목인 .generated.h 앞에 삽입됩니다. #include가 잘못 배치되면 해당하는 검사에서 강조 표시합니다.

Unreal Engine의 이름 변경 리팩토링을 통해 *.generated.h include 지시문 및 접두어 A, F, E, T, S, U가 포함된 관련 파일을 업데이트할 수 있습니다.

UE4 코드 생성

코드 생성

UCLASSes용 "new" 접두어 템플릿은 적절한 팩토리 함수 호출(가비지 컬렉터에서 생성된 오브젝트를 등록하는 호출)로 확장됩니다. 또 해당하는 이름을 라이브 템플릿이 제공되어 USTRUCT/UCLASS/UENUM/UENUMCLASS를 빠르게 생성할 수 있습니다.

USF 파일

USF 파일

Unreal Engine USF 파일은 HLSL을 기반으로 멀티 플랫폼 쉐이더 코드를 포함합니다. ReSharper C++는 일반적으로 가상 파일 경로가 포함되는 USF 파일 및 모든 일반 액션을 지원합니다.

HLSL

SpatialOS GDK

Unreal Engine 4 포크인 SpatialOS 게임 개발 키트는 클라우드에서 온라인 게임을 실행하고 관리하는 데 유용합니다. ReSharper C++는 CrossServer, SpatialType, NonSpatialType 및 기타 SpatialOS 지정자를 인식합니다. 자세히 알아보기

HLSL

HLSL

이제 ReSharper C++ 버전은 고급 셰이딩 언어 HLSL의 조기 지원을 제공합니다. ReSharper C++는 기본 색 구성표에 따라 HLSL 코드를 강조 표시하며 유형 정보, 문서가 포함된 코드 요소에 대한 툴팁 및 삽입된 힌트를 표시합니다. 그뿐 아니라 전체 솔루션, 참조된 파일 및 표준 라이브러리에서 구조체, 함수 또는 매개변수를 검색하고 빠르게 탐색할 수도 있습니다. 또한 ReSharper C++는 완벽한 HLSL 경험을 위해 스마트 코드 완성, 일치하는 구분자 자동 삽입 기능 등을 선보입니다.

다운로드

30일 무료 평가판