Visual Studio에서 C++ 코드 편집 및 리팩터링Edit and refactor C++ code in Visual Studio

Visual Studio는 코드를 작성, 편집 및 리팩터링할 수 있는 여러 도구를 제공합니다.Visual Studio provides several tools to help you write, edit, and refactor your code.

IntelliSenseIntelliSense

IntelliSense는 사용자가 입력하면 그에 따라 기호 및 코드 조각을 제안하는 강력한 코드 완성 도구입니다.IntelliSense is a powerful code completion tool that suggests symbols and code snippets for you as you type. Visual Studio의 C++ IntelliSense는 실시간으로 실행되며, 사용자가 코드 베이스를 업데이트하면 그것을 분석하여 추천을 제공합니다.C++ IntelliSense in Visual Studio runs in real time, analyzing your codebase as you update it and providing recommendations. 사용자가 더 많은 문자를 입력하면 추천 결과 목록이 좁혀집니다.As you type more characters, the list of recommended results narrows down.

C++ 멤버 목록 드롭다운

일부 기호는 결과 범위를 좁히기 위해 자동으로 생략됩니다.Some symbols are omitted automatically to help narrow down the results. 예를 들어 클래스 외부에서 클래스 개체의 멤버에 액세스할 때에는 기본적으로 프라이빗 멤버 또는 보호된 멤버(자식 클래스 컨텍스트에 있지 않은 경우)를 볼 수 없습니다.For example, when accessing a class object’s members from outside the class, you will not be able to see private members by default, or protected members (if you are not in the context of a child class). 하단의 단추를 사용하여 필터링을 조정할 수 있습니다.You can adjust the filtering by using the buttons at the bottom.

드롭다운 목록에서 기호를 선택한 후에는 Tab, Enter 또는 다른 커밋 문자 중 하나로 기호를 자동 완성할 수 있습니다(기본적으로 {}.,:;+-*/%&|^!=?@#).After you choose the symbol from the drop-down list, you can autocomplete it with Tab, Enter, or one of the other commit characters (by default: {}.,:;+-*/%&|^!=?@#). 이 목록에서 문자를 추가 또는 제거하려면 빠른 실행(Ctrl + Q)에서 "IntelliSense"를 검색하고 텍스트 편집기 > C/C++ > 고급 옵션을 선택합니다.To add or remove characters from this list, search for "IntelliSense" in Quick Launch (Ctrl + Q) and choose the Text Editor > C/C++ > Advanced option. 멤버 목록 커밋 문자 옵션을 사용하면 목록을 원하는 대로 변경하여 사용자 지정할 수 있습니다.The Member List Commit Characters option enables you to customize the list with the changes you want.

멤버 목록 필터 모드 옵션은 표시할 IntelliSense 자동 완성 제안의 종류를 제어합니다.The Member List Filter Mode option controls what kinds of IntelliSense autocomplete suggestions you see. 기본적으로 유사 항목으로 설정됩니다.By default, it is set to Fuzzy. 유사 항목 검색에서는 MyAwesomeClass라는 기호가 있는 경우 "MAC"를 입력하고 자동 완성 제안에서 해당 클래스를 찾을 수 있습니다.In a fuzzy search, if you have a symbol called MyAwesomeClass, you can type "MAC" and find the class in your autocomplete suggestions. 유사 항목 알고리즘은 기호가 목록에 표시되려면 충족해야 하는 최소 임계값을 설정합니다.The fuzzy algorithm sets a minimum threshold that symbols must meet to show up in the list. 스마트 필터링은 사용자가 입력한 내용과 일치하는 부분 문자열이 포함된 모든 기호를 표시합니다.Smart filtering displays all symbols containing substrings that match what you typed. 접두사 필터링은 사용자가 입력한 문자로 시작되는 문자열을 검색합니다.Prefix filtering searches for strings that begin with what you typed.

C++ IntelliSense에 대한 자세한 내용은 Visual C++ IntelliSenseIntelliSense에 대한 C++ 프로젝트 구성을 참조하세요.For more information about C++ IntelliSense, see Visual C++ IntelliSense and Configure a C++ project for IntelliSense.

IntelliCodeIntelliCode

IntelliCode는 AI의 도움을 받을 수 있는 IntelliSense입니다.IntelliCode is AI-assisted IntelliSense. 완성 목록에 사용될 가능성이 가장 높은 후보입니다.It puts the most likely candidate at the top of your completion list. IntelliCode 추천은 각각 100개가 넘는 별을 받은 GitHub의 오픈 소스 프로젝트를 기반으로 합니다.IntelliCode recommendations are based on thousands of open source projects on GitHub each with over 100 stars. 코드의 컨텍스트와 결합하면 완성 목록을 원하는 대로 구성하여 일반적인 사례의 수준을 높일 수 있습니다.When combined with the context of your code, the completion list is tailored to promote common practices.

C++을 작성하는 경우 IntelliCode는 표준 라이브러리처럼 인기 있는 라이브러리를 사용할 때 도움이 됩니다.When writing C++, IntelliCode will assist when using popular libraries such as the C++ Standard Library. 코드의 컨텍스트는 무엇보다도 가장 유용한 추천을 제공하기 위해 사용됩니다.The context of your code is used to provide the most useful recommendations first. 다음 예제의 size 멤버 함수는 일반적으로 sort 함수와 함께 사용되므로 결과 목록의 맨 위에 표시됩니다.In the following example, the size member function is commonly used with the sort function, so it is surfaced to the top of the results list.

C++ IntelliCodeC++ IntelliCode

Visual Studio 2019에서는 IntelliCode가 C++ 데스크톱 개발 워크로드의 선택적 구성 요소로 제공됩니다.In Visual Studio 2019, IntelliCode is available as an optional component in the C++ Desktop Development workload. IntelliCode가 C++에 대해 활성화되었는지 확인하려면 도구 > 옵션 > IntelliCode > 일반으로 이동하여 C++ 기본 모델사용으로 설정합니다.To make sure that IntelliCode is active for C++, go to Tools > Options > IntelliCode > General and set C++ base model to Enabled.

Visual Studio 2017에서는 IntelliCode가 Visual Studio Marketplace에 확장으로 제공됩니다.In Visual Studio 2017, IntelliCode is available as an extension in the Visual Studio Marketplace.

예측 IntelliSense(실험적)Predictive IntelliSense (Experimental)

예측 IntelliSense는 컨텍스트 인식 기능을 사용하여 IntelliSense 드롭다운 목록에 표시되는 결과의 수를 제한하는 실험적 기능입니다.Predictive IntelliSense is an experimental feature that uses contextual awareness to limit the number of results displayed in the IntelliSense dropdown list. 이 알고리즘은 형식 일치를 적용하여 예상 형식과 일치하는 결과만 표시합니다.The algorithm applies type matching so that it shows only those results that match the expected type. 간단한 예를 들자면, int x =을 입력하고 IntelliSense 드롭다운을 호출하면 정수 또는 정수를 반환하는 함수만 표시됩니다.In the simplest case, if you type int x = and invoke the IntelliSense dropdown, you will see only integers or functions returning integers. 이 기능은 아직 개발 중이기 때문에 기본적으로 해제되어 있습니다.This feature is off by default because it is still in development. 이 기능이 가장 잘 작동하는 것은 글로벌 기호이며, 멤버 함수는 아직 지원되지 않습니다.It works best with global symbols; member functions are not yet supported. 빠른 실행에 "예측"을 입력하거나 도구 > 옵션 > 텍스트 편집기 > C/C++ > 실험적 > 예측 IntelliSense 사용으로 이동하여 이 기능을 켤 수 있습니다.You can turn it on by typing "Predictive" in Quick Launch or by going to Tools > Options > Text Editor > C/C++ > Experimental > Enable Predictive IntelliSense.

예측 IntelliSense를 재정의하고 더 긴 목록을 표시하려면 Ctrl + J를 누릅니다. 예측 IntelliSense가 켜져 있는 경우 Ctrl + J를 누르면 예측 필터가 제거됩니다.To override Predictive IntelliSense and show the longer list, press Ctrl + J. If Predictive IntelliSense is on, invoking Ctrl + J removes the Predictive filter. Ctrl + J를 다시 누르면 관련된 멤버 목록 결과에서 내게 필요한 옵션 필터가 제거됩니다.Pressing Ctrl + J again removes the accessibility filter from Member List results where relevant. IntelliSense 드롭다운 목록 아래의 ([+]) 단추는 Ctrl + J와 똑같은 방식으로 작동합니다. 마우스 커서를 단추 위로 이동하면 현재 표시되는 항목의 도구 설명 정보를 볼 수 있습니다.The ([+]) button under the IntelliSense dropdown list does the same thing as Ctrl + J. Hover over the button to see tooltip information about what is being shown.

C++ 예측 IntelliSenseC++ Predictive IntelliSense

이전 스크린샷은 드롭다운 목록 아래에 있는 여러 단추를 보여줍니다.The preceding screenshot shows several buttons under the dropdown list. 이러한 단추를 통해 다양한 종류의 결과에 IntelliSense 필터를 사용할 수 있습니다.These enable IntelliSense Filters for different kinds of results:

  • 변수와 상수Variables and Constants
  • 함수Functions
  • 유형Types
  • 매크로Macros
  • 열거형Enums
  • 네임스페이스Namespaces

단추는 현재 IntelliSense 세션과 관련이 있는 경우에만 표시됩니다.A button is displayed only if it is relevant to your current IntelliSense session. 일반적으로 일부 단추만 표시됩니다.You typically do not see all the buttons at the same time.

템플릿 IntelliSenseTemplate IntelliSense

템플릿 정의 내에 캐럿이 있는 경우 IntelliSense의 샘플 템플릿 인수를 제공할 수 있는 템플릿 표시줄이 나타납니다.When the caret is inside a template definition, a Template Bar appears, which enables you to provide sample template arguments for IntelliSense.

C++ 기존 인스턴스화를 보여주는 템플릿 IntelliSenseC++ Template IntelliSense Show Existing Instantiations

아이콘을 클릭하면 템플릿 표시줄이 확장/축소됩니다.Click the icon to expand/collapse the Template Bar. 연필 아이콘을 클릭하거나 템플릿 표시줄을 두 번 클릭하면 편집 창이 열립니다.Click the pencil icon or double-click the Template Bar to open the Edit window.

C++ 템플릿 IntelliSenseC++ Template IntelliSense

이 창에서 편집하는 내용은 소스 코드에 바로 적용되므로 편집 효과를 실시간으로 확인할 수 있습니다.Edits that you make in the window are applied directly to the source code, so that you can see the effects in real time.

템플릿 표시줄은 코드의 인스턴스화에 따라 후보를 자동으로 채울 수 있습니다.The Template Bar can auto-populate candidates based on instantiations in your code. 모든 기존 인스턴스화 추가를 클릭하면 코드 베이스 전체에서 템플릿 인스턴스화에 사용된 모든 구체적 인수 목록을 볼 수 있습니다.Click on Add All Existing Instantiations to see a list of all concrete arguments that have been used to instantiate the template throughout your code base.

C++ 템플릿 IntelliSense 결과 목록C++ Template IntelliSense Results List

편집기 하단의 창은 각 인스턴스화가 발견된 위치 및 해당 인수를 보여줍니다.A window at the bottom of the editor shows where each instantiation was found, and what its arguments were.

C++ 템플릿 IntelliSense 인스턴스화 맵C++ Template IntelliSense Instantiation Map

템플릿 표시줄 정보는 사용자별로 처리됩니다.Template Bar information is treated as user-specific. .vs 폴더에 저장되며 소스 제어에 커밋되지 않습니다.It is stored in the .vs folder and is not committed to source control.

오류 표시선 및 빠른 수정Error squiggles and quick fixes

편집기는 코드에서 문제를 발견하면 해당 문제 아래에 색이 있는 오류 표시선을 추가합니다.If the editor detects problems with your code, it will add colored squiggles under the problem. 빨간색 오류 표시선은 컴파일되지 않는 코드를 나타냅니다.Red squiggles indicate code that won't compile. 녹색 오류 표시선은 중대한 오류일 수도 있는 다른 종류의 문제를 나타냅니다.Green squiggles indicate other kinds of problems that might still be potentially serious. 오류 목록 창을 열면 문제에 대한 자세한 정보를 볼 수 있습니다.You can open the Error List window to get more information about the problems.

일부 오류와 일반적인 코딩 패턴의 경우 편집기에서 오류 표시선 위로 마우스 커서를 이동하면 전구 모양의 형태로 빠른 수정이 제공됩니다.For some kinds of errors, as well as common coding patterns, the editor will offer a Quick Fix in the form of a light bulb that appears when you hover over the squiggle. 아래쪽 화살표를 클릭하면 제안 사항을 볼 수 있습니다.Click the down arrow to see the suggestions.

다음 예제에서는 vector가 선언되었지만 정의를 찾을 수 없으므로 편집기는 다음과 같은 필요한 헤더 파일을 포함할 것을 제안합니다.In the following example, a vector was declared but no definition was found, so the editor offers to include the necessary header file:

C++ 빠른 수정C++ quick fix

또한 편집기는 일부 리팩터링 기회에 빠른 픽스를 제공합니다.The editor also offers Quick Fixes for some refactoring opportunities. 예를 들어 헤더 파일에서 클래스를 선언하면 Visual Studio는 별도의 .cpp 파일에 해당 클래스에 대한 정의를 만들 것을 제안합니다.For example, if you declare a class in a header file, Visual Studio will offer to create a definition for it in a separate .cpp file.

C++ 빠른 수정C++ quick fix

Change trackingChange tracking

사용자가 파일을 변경할 때마다 저장되지 않은 변경 내용이 있음을 나타내는 노란색 표시줄이 왼쪽에 표시됩니다.Whenever you make a change to a file, a yellow bar appears on the left to indicate that unsaved changes were made. 파일을 저장하면 표시줄이 녹색으로 바뀝니다.When you save the file, the bar turns green. 녹색 및 노란색 표시줄은 문서가 편집기에서 열려 있는 동안 유지됩니다.The green and yellow bars are preserved as long as the document is open in the editor. 이러한 표시줄은 사용자가 마지막으로 문서를 연 이후에 변경한 내용을 나타냅니다.They represent the changes that were made since you last opened the document.

C++ 변경 내용 추적C++ change tracking

코드 이동Move code

코드를 선택하고, Alt 키를 누른 상태에서 위쪽/아래쪽 화살표 키를 눌러 코드 줄을 위아래로 이동할 수 있습니다.You can move lines of code up and down by selecting them, holding down Alt, and pressing the Up/Down arrow keys.

코드 조각 삽입Insert snippets

코드 조각은 소스 코드의 미리 정의된 조각입니다.A snippet is a predefined piece of source code. 단일 지점이나 선택한 텍스트를 마우스 오른쪽 단추로 클릭하여 코드 조각을 삽입하거나 선택한 텍스트를 코드 조각으로 둘러쌉니다.Right-click on a single point or on selected text to either insert a snippet or surround the selected text with the snippet. 다음 그림에서는 선택한 문을 for 루프로 둘러싸는 세 단계를 보여 줍니다.The following illustration shows the three steps to surround a selected statement with a for loop. 최종 이미지의 노란색 강조 표시는 tab 키를 사용하여 액세스하는 편집 가능한 필드입니다.The yellow highlights in the final image are editable fields that you access with the tab key. 자세한 내용은 코드 조각을 참조하세요.For more information, see Code Snippets.

C++ 코드 조각 삽입 드롭-다운C++ Insert Snippet Drop-down

클래스 추가Add Class

프로젝트 메뉴 또는 솔루션 탐색기의 팝업 메뉴에서 새 클래스를 추가합니다.Add a new class from the Project menu, or from the context menu in Solution Explorer:

C++에서 새 클래스 추가Add New Class in C++

기존 클래스를 수정하거나 검사하려면 클래스 마법사를 사용할 수도 있습니다.You can also use Class Wizard to modify or examine an existing class.

C++ 클래스 마법사

자세한 내용은 코드 마법사로 기능 추가(C++)를 참조하세요.For more information, see Adding Functionality with Code Wizards (C++).

리팩터링Refactoring

리팩터링은 빠른 작업 상황에 맞는 메뉴 아래에서 또는 편집기에서 전구를 클릭하여 사용할 수 있습니다.Refactorings are available under the Quick Action context menu, or by clicking on a light bulb in the editor. 일부는 편집 > 리팩터링 메뉴에 있습니다.Some are also found in the Edit > Refactor menu. 이러한 기능에는 다음이 포함됩니다.These features include:

ClangFormat 및 EditorConfig를 사용하여 코드 스타일 적용Code style enforcement with ClangFormat and EditorConfig

Visual Studio 2017 이상부터는 Clang/LLVM 기반의 인기 있는 C++용 코드 서식 지정 유틸리티인 ClangFormat을 기본적으로 지원합니다.Visual Studio 2017 and later comes with built-in support for ClangFormat, a popular code-formatting utility for C++ based on Clang/LLVM. 빠른 실행에 "ClangFormat"을 입력하고 다음과 같은 일반 형식 중 하나를 사용하도록 설정합니다.Type "ClangFormat" into Quick Launch to set it to use one of these common formats:

  • LLVMLLVM
  • GoogleGoogle
  • ChromiumChromium
  • MozillaMozilla
  • WebKitWebKit
  • Visual StudioVisual Studio

동일한 수준 또는 하위 수준에서 모든 코드에 사용자 지정 규칙을 적용하는 사용자 고유의 .clang-format 또는 _clang-format 파일을 제공할 수도 있습니다.You can also provide your own .clang-format or _clang-format file to apply custom rules to all code files at the same level or below.

이러한 파일은 소스 제어를 통해 쉽게 공유할 수 있으므로, 개발 팀 전체에 코딩 규칙을 적용할 수 있습니다.The files are easily shareable via source control, so you can enforce coding conventions across your whole development team.

C++ ClangFormatC++ Clang Format

Visual Studio 2017 이상부터는 비슷한 방식으로 작동하는 EditorConfig도 지원합니다.Visual Studio 2017 and later also supports EditorConfig, which works in a similar way. 하지만 ClangFormat은 C++와 관련된 규칙을 포함하여 EditorConfig보다 많은 스타일 옵션을 제공합니다.ClangFormat, however, has a more style options than EditorConfig, including rules that are specific to C++. EditorConfig.editorconfig 파일을 만들어서 데이터베이스의 여러 폴더에 배치하는 방법으로 해당 폴더와 그 하위 폴더의 코드 스타일을 지정할 수 있습니다.With EditorConfig, you create .editorconfig files and place them in different folders of your codebase to specify code styles for those folders and their subfolders. .editorconfig 파일은 부모 폴더의 다른 .editorconfig 파일을 대체하고 도구 > 옵션을 통해 구성된 서식 설정을 덮어씁니다.An .editorconfig file supersedes any other .editorconfig files in parent folders and overwrites any formatting settings configured via Tools > Options. 탭과 공간, 들여쓰기 크기 등에 대한 규칙을 설정할 수 있습니다.You can set rules for tabs vs. spaces, indent size, and more. 자세한 내용은 EditorConfig를 사용하여 휴대용, 사용자 지정 편집기 설정 만들기를 참조하세요.For more information, see Create portable, custom editor settings with EditorConfig.

다른 서식 지정 옵션Other formatting options

빠른 실행 검색 상자는 설정 또는 도구를 찾는 가장 빠른 방법을 제공합니다.The Quick Launch search box provides the fastest way to find a setting or tool. 이 방법은 주 메뉴에 있습니다.It is located on the main menu. 입력을 시작하면 자동 완성 목록이 결과를 필터링합니다.Just start typing and the auto-completion list will filter the results.

Visual Studio 빠른 실행Visual Studio Quick Launch

들여쓰기, 중괄호 완성, 색 지정과 같은 서식 지정 옵션을 설정하려면 빠른 실행 창에 "C++ 서식 지정"을 입력합니다.To set formatting options such as indents, brace completion, and colorization, type "C++ Formatting" into the Quick Launch window.

C++ 서식 지정 옵션

다른 서식 지정 옵션은 주 메뉴의 편집 > 고급 아래에서 찾을 수 있습니다.Other formatting options are found under Edit > Advanced in the main menu.

C++ 고급 편집 옵션

C++ 관련 편집 기능을 사용하고 구성하기 위한 옵션은 도구 > 옵션 > 텍스트 편집기 > C/C++ 에 있습니다.Options for enabling and configuring C++-specific editing features are located under Tools > Options > Text Editor > C/C++. 설정하려는 옵션을 선택한 후 대화 상자에 초점이 맞춰져 있을 때 F1 키를 누르면 추가 도움말을 확인할 수 있습니다.After choosing which option you want to set, you can get more help by pressing F1 when the dialog is in focus. 일반적인 코드 서식 지정 옵션은 빠른 실행Editor C++을 입력합니다.For general code formatting options, type Editor C++ into Quick Launch.

Visual Studio 도구 > 옵션Visual Studio Tools > Options

향후 버전의 Visual Studio에 포함될 수도 포함되지 않을 수 있는 실험적 기능은 텍스트 편집기 C++ 실험적 대화 상자에 있습니다.Experimental features, which may or may not be included in a future version of Visual Studio, are found in the Text Editor C++ Experimental dialog. Visual Studio 2017 이상에서는 이 대화 상자에서 예측 IntelliSense를 사용하도록 설정할 수 있습니다.In Visual Studio 2017 and later you can enable Predictive IntelliSense in this dialog.

참고 항목See Also

C++ 코드 읽기 및 이해Read and understand C++ code
Visual Studio에서 C++ 코드 베이스 탐색Navigate your C++ code base in Visual Studio
C++용 Live Share를 사용하여 협업Collaborate with Live Share for C++