Python 코드 리팩터링Refactoring Python code

Visual Studio는 Python 소스 코드를 자동으로 변환하고 정리하는 몇 가지 명령을 제공합니다.Visual Studio provides several commands for automatically transforming and cleaning up your Python source code:

<a name="rename-variable"<a name="rename-variable"

이름 바꾸기Rename

  1. 이름을 바꿀 식별자를 마우스 오른쪽 단추로 클릭하여 이름 바꾸기를 선택하거나, 해당 식별자에 캐럿을 배치하여 편집 > 리팩터링 > 이름 바꾸기... 메뉴 명령(F2)을 선택합니다.Right-click the identifier you wish to rename and select Rename, or place the caret in that identifier and select the Edit > Refactor > Rename... menu command (F2).
  2. 이름 바꾸기 대화 상자가 표시되면 식별자의 새 이름을 입력하고 확인을 선택합니다.In the Rename dialog that appears, enter the new name for the identifier and select OK:

    새 식별자 이름에 대한 프롬프트 이름 바꾸기

  3. 다음 대화 상자에서 이름 바꾸기를 적용할 코드의 파일과 인스턴스를 선택합니다. 특정 인스턴스를 선택하여 해당 변경 내용을 미리 봅니다.In the next dialog, select the files and instances in your code to which to apply the renaming; select any individual instance to preview the specific change:

    대화 상자의 이름을 변경하여 변경 내용을 적용할 위치 선택

  4. 적용을 선택하여 원본 코드 파일을 변경합니다.Select Apply to make the changes to your source code files. 이 작업은 실행 취소할 수 있습니다.(This action can be undone.)

메서드 추출Extract method

  1. 별도의 메서드로 추출할 코드 줄이나 식을 선택합니다.Select the lines of code or the expression to extract into a separate method.
  2. 편집 > 리팩터링 > 메서드 추출... 메뉴 명령을 선택하거나 Ctrl+R, M을 입력합니다.Select the Edit > Refactor > Extract method... menu command or type Ctrl-R, M.
  3. 표시되는 대화 상자에서 새 메서드 이름을 입력하고 추출할 위치를 지정한 다음 클로저 변수를 선택합니다.In the dialog that appears, enter a new method name, indicate where to extract it to, and select any closure variables. 클로저로 선택되지 않은 변수는 메서드 인수로 변환됩니다.Variables not selected for closure are turned into method arguments:

    메서드 추출 대화 상자

  4. 확인을 선택하고, 이에 따라 코드가 수정됩니다.Select OK and the code is modified accordingly:

    메서드 추출 결과

가져오기 추가Add import

형식 정보가 없는 식별자에 캐럿을 배치하면 Visual Studio에서 명령에 필요한 import 또는 from ... import 문을 추가하는 스마트 태그(코드 왼쪽의 전구 모양 아이콘)를 제공합니다.When you place the caret on an identifier that lacks type information, Visual Studio provides a smart tag (the lightbulb icon to the left of the code) whose commands add the necessary import or from ... import statement:

가져오기 스마트 태그 추가

Visual Studio에서는 현재 프로젝트 및 표준 라이브러리의 최상위 패키지 및 모듈에 대해 import 완성 기능뿐만 아니라Visual Studio offers import completions for top-level packages and modules in the current project and the standard library. 하위 모듈 및 하위 패키지와 모듈 멤버에 대한 from ... import 완성 기능도 제공합니다.Visual Studio also offers from ... import completions for submodules and subpackages as well as module members. 완성 기능에는 함수, 클래스, 내보낸 데이터 등이 포함됩니다.Completions include functions, classes, or exported data. 두 옵션 중 하나를 선택하면 다른 가져오기 후에 문을 파일의 맨 위에 추가하거나 동일한 모듈을 이미 가져온 경우 기존 from ... import 문에 해당 문을 추가합니다.Selecting either option adds the statement to at the top of the file after other imports, or into an existing from ... import statement if the same module is already imported.

가져오기 추가 결과

Visual Studio는 모듈에서 실제로 정의되지 않은 멤버(예: 다른 모듈로 가져왔지만 가져오기를 수행하는 모듈의 자식이 아닌 모듈)를 필터링하려고 합니다.Visual Studio attempts to filter out members that aren't actually defined in a module, such as modules that are imported into another but aren't children of the module doing the importing. 예를 들어 많은 모듈에서 from xyz import sys 대신 import sys를 사용하므로 해당 모듈에 sys를 제외하는 __all__ 멤버가 없더라도 다른 모듈에서 sys 가져오기 완성이 표시되지 않습니다.For example, many modules use import sys rather than from xyz import sys, so you don't see a completion for importing sys from other modules even if the modules are missing an __all__ member that excludes sys.

마찬가지로 Visual Studio는 다른 모듈이나 기본 제공 네임스페이스에서 가져온 함수를 필터링합니다.Similarly, Visual Studio filters functions that are imported from other modules or from the built-in namespace. 예를 들어 모듈이 sys 모듈에서 settrace 함수를 가져오는 경우 이론적으로는 해당 모듈에서 가져올 수 있습니다.For example if a module imports the settrace function from the sys module, then in theory you could import it from that module. 그러나 import settrace from sys를 직접 사용하는 것이 가장 좋으므로 Visual Studio는 해당 문을 구체적으로 제공합니다.But it's best to use import settrace from sys directly, and so Visual Studio offers that statement specifically.

마지막으로, 일반적으로 제외되는 모듈에 포함될 다른 값이 있는 경우(예: 모듈에서 이름에 값이 할당되었기 때문에) Visual Studio에서 여전히 가져오기를 제외합니다.Finally, if something would normally be excluded but has other values that would be included (because the name was assigned a value in the module, for example), Visual Studio still excludes the import. 이 동작은 값이 다른 모듈에 정의되어 있으므로 해당 값을 내보내지 않아야 한다고 가정합니다. 따라서 추가 할당은 내보낼 수 없는 더미 값이 될 수도 있습니다.This behavior assumes that the value shouldn't be exported because it is defined in another module, and thus the additional assignment is likely to be a dummy value that is also not exported.

<a name="remove-imports"<a name="remove-imports"

사용하지 않는 가져오기 제거Remove unused imports

코드를 작성할 때 전혀 사용되지 않는 모듈에 대해 import 문으로 끝나는 것은 쉽습니다.When writing code, it's easy to end up with import statements for modules that aren't being used at all. Visual Studio는 코드를 분석하므로 문이 나타나는 위치 아래의 범위 내에서 가져온 이름을 사용하는지 확인하여 import 문이 필요한지를 자동으로 결정할 수 있습니다.Because Visual Studio analyzes your code, it can automatically determine whether an import statement is needed by looking at whether the imported name is used within the scope below where the statement occurs.

편집기의 아무 곳이나 마우스 오른쪽 단추로 클릭하고 모든 범위 또는 현재 범위에서 제거할 수 있는 옵션을 제공하는 가져오기 제거를 선택합니다.Right-click anywhere in the editor and select Remove Imports, which gives you options to remove from All Scopes or just the Current Scope:

가져오기 제거 메뉴

그러면 Visual Studio에서 코드를 적절하게 변경합니다.Visual Studio then makes the appropriate changes to the code:

가져오기 제거 결과

Visual Studio는 제어 흐름을 설명하지 않습니다. import 문 앞에 이름을 사용하면 이름이 실제로 사용된 것처럼 처리됩니다.Note that Visual Studio does not account for control flow; using a name before an import statement is treated as if the name was in fact used. 또한 Visual Studio는 from ... import * 문뿐만 아니라 모든 from __future__ 가져오기, 즉 클래스 정의 내에서 수행되는 가져오기도 무시합니다.Visual Studio also ignores all from __future__ imports, imports that are performed inside of a class definition, as well from from ... import * statements.