{"meta":{"title":"GitHub Copilot를 사용하여 코드 리팩터링","intro":"Copilot 인공 지능을 활용하여 코드를 빠르고 효과적으로 리팩터링할 수 있습니다.","product":"GitHub Copilot","breadcrumbs":[{"href":"/ko/copilot","title":"GitHub Copilot"},{"href":"/ko/copilot/tutorials","title":"자습서"},{"href":"/ko/copilot/tutorials/refactor-code","title":"코드 리팩터링"}],"documentType":"article"},"body":"# GitHub Copilot를 사용하여 코드 리팩터링\n\nCopilot 인공 지능을 활용하여 코드를 빠르고 효과적으로 리팩터링할 수 있습니다.\n\n## 소개\n\n코드 리팩터링은 동작을 변경하지 않고 기존 코드를 재구성하는 프로세스입니다. 리팩터링의 이점은 코드 가독성 향상, 복잡성 감소, 더 간편한 코드 유지 관리 및 새로운 기능을 더 쉽게 추가할 수 있는 것 등이 있습니다.\n\n이 문서에서는 Copilot을(를) 사용하여 IDE의 코드를 리팩터링하는 방법에 대한 몇 가지 아이디어를 제공합니다.\n\n> \\[!NOTE] 예시 응답은 이 문서에 포함되어 있습니다. 깃허브 코파일럿 채팅은 여기에 표시된 응답과 다른 응답을 제공할 수 있습니다.\n\n## 코드 이해\n\n기존 코드를 수정하기 전에 해당 용도와 현재 작동 방식을 이해해야 합니다. Copilot가 도움이 될 수 있습니다.\n\n1. IDE 편집기에서 관련 코드를 선택합니다.\n2. 인라인 채팅 열기:\n\n   * **VS Code에서:** <kbd>Command</kbd>+<kbd>i</kbd>(Mac) 또는 <kbd>Ctrl</kbd>+<kbd>i</kbd>(Windows/Linux)를 누릅니다.\n   * **Visual Studio에서** <kbd>Alt</kbd>+<kbd>/</kbd>를 누릅니다.\n   * **JetBrains IDE에서:** <kbd>Control</kbd>+<kbd>Shift</kbd>+<kbd>i</kbd>(Mac) 또는 <kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>g</kbd>(Windows/Linux)를 누릅니다.\n3. 인라인 채팅의 입력 상자에 슬래시(`/`)를 입력합니다.\n4. 드롭다운 목록에서 **/explain**을 선택하고 <kbd>Enter</kbd> 키를 누릅니다.\n5. Copilot이(가) 반환하는 설명이 몇 줄 이상인 경우 **채팅에서 보기**를 클릭하여 설명을 더 쉽게 읽을 수 있습니다.\n\n## 비효율적인 코드 최적화\n\nCopilot를 사용하면 코드를 더 빠르게 실행하는 등 코드를 최적화하는 데 도움이 될 수 있습니다.\n\n### 예제 코드\n\n아래 두 섹션에서는 다음 예제 Bash 스크립트를 사용하여 비효율적인 코드를 최적화하는 방법을 보여줍니다.\n\n```bash\n#!/bin/bash\n\n# Find all .txt files and count lines in each\nfor file in $(find . -type f -name \"*.txt\"); do\n    wc -l \"$file\"\ndone\n```\n\n### 공동 파일럿 채팅 패널을 사용하세요.\n\nCopilot은(는) 예제 Bash 스크립트와 같은 코드를 최적화할 수 있는지 여부를 알려줄 수 있습니다.\n\n1. ```\n          `for` loop 또는 파일의 전체 내용을 선택합니다.\n   ```\n\n2. 활동 표시줄에서 채팅 아이콘을 클릭하거나 바로 가기 키를 사용하여 공동 파일럿 채팅을 엽니다.\n\n   * ```\n               **VS Code and Visual Studio:**<kbd>Control</kbd>+<kbd>Command</kbd>+<kbd>i</kbd> (Mac) / <kbd>Ctrl</kbd>+<kbd>Alt</kbd>+<kbd>i</kbd> (Windows/Linux)\n     ```\n   * **JetBrains**: <kbd>Control</kbd>+<kbd>Shift</kbd>+<kbd>c</kbd>\n\n3. 채팅 패널 아래쪽의 입력 상자에 `Can this script be improved?`을 입력합니다.\n\n   Copilot은(는) 코드를 보다 효율적으로 만들 수 있는 제안으로 회신합니다.\n\n4. 제안된 변경 사항을 적용하려면:\n\n   * **VS Code 및 JetBrains에서:** 채팅 패널의 제안 항목에 마우스를 올린 후 나타나는 **커서 위치에 삽입** 아이콘을 클릭합니다.\n\n     ![공동 파일럿 채팅 패널에 있는 ‘커서에 삽입’ 아이콘의 스크린샷입니다.](/assets/images/help/copilot/insert-at-cursor.png)\n\n   * **Visual Studio에서:\\*\\*\\*\\*미리 보기**를 클릭한 다음 비교 보기에서 **수락**을 클릭합니다.\n\n### Copilot 인라인 채팅 사용\n\n또는 예제 Bash 스크립트와 같은 기존 코드가 비효율적이라는 것을 이미 알고 있는 경우:\n\n1. ```\n          `for` loop 또는 파일의 전체 내용을 선택합니다.\n   ```\n\n2. 인라인 채팅 열기:\n\n   * **VS Code에서:** <kbd>Command</kbd>+<kbd>i</kbd>(Mac) 또는 <kbd>Ctrl</kbd>+<kbd>i</kbd>(Windows/Linux)를 누릅니다.\n   * **Visual Studio에서** <kbd>Alt</kbd>+<kbd>/</kbd>를 누릅니다.\n   * **JetBrains IDE에서:** <kbd>Control</kbd>+<kbd>Shift</kbd>+<kbd>i</kbd>(Mac) 또는 <kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>g</kbd>(Windows/Linux)를 누릅니다.\n\n3. ```\n          `optimize`을 입력하고 <kbd>Enter</kbd> 키를 누릅니다.\n   ```\n\n   Copilot는 수정된 코드를 제안합니다. 예시:\n\n   ```bash\n   find . -type f -name \"*.txt\" -exec wc -l {} +\n   ```\n\n   ```\n          `-exec ... +`를 사용하면 발견된 각 `find` 파일에 대해 `wc`를 한 번 호출하는 대신 `wc`가 한 번에 여러 파일을 `*.txt`에 전달할 수 있기 때문에 이 문서의 앞부분에 표시된 원래 코드보다 더 효율적입니다.\n   ```\n\n4. Copilot의 제안을 평가하고 변경에 동의하는 경우 다음을 수행합니다.\n\n   * **VS Code 및 Visual Studio에서:** **수락**을 클릭합니다.\n   * **JetBrains**: 미리 보기 아이콘(이중 화살표)을 클릭한 다음 모든 Diff 적용 아이콘(이중 꺾쇠 괄호)을 클릭합니다.\n\n모든 Copilot 제안과 마찬가지로 수정된 코드가 오류 없이 실행되고 올바른 결과를 생성하는지 항상 확인해야 합니다.\n\n## 반복 코드 정리\n\n반복을 방지하면 코드를 보다 쉽게 수정하고 디버그할 수 있습니다. 예를 들어 동일한 계산이 파일의 다른 위치에서 두 번 이상 수행되는 경우 계산을 함수로 전환할 수 있습니다.\n\n다음의 매우 간단한 JavaScript 예제에서는 동일한 계산(항목 가격에 판매된 항목 수를 곱한 값)이 두 위치에서 수행됩니다.\n\n```javascript\nlet totalSales = 0;\n\nlet applePrice = 3;\nlet applesSold = 100;\ntotalSales += applePrice * applesSold;\n\nlet orangePrice = 5;\nlet orangesSold = 50;\ntotalSales += orangePrice * orangesSold;\n\nconsole.log(`Total: ${totalSales}`);\n```\n\nCopilot에게 반복 계산을 함수로 이동하도록 요청할 수 있습니다.\n\n1. 파일의 전체 내용을 선택합니다.\n\n2. 인라인 채팅 열기:\n\n   * **VS Code에서:** <kbd>Command</kbd>+<kbd>i</kbd>(Mac) 또는 <kbd>Ctrl</kbd>+<kbd>i</kbd>(Windows/Linux)를 누릅니다.\n   * **Visual Studio에서** <kbd>Alt</kbd>+<kbd>/</kbd>를 누릅니다.\n   * **JetBrains IDE에서:** <kbd>Control</kbd>+<kbd>Shift</kbd>+<kbd>i</kbd>(Mac) 또는 <kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>g</kbd>(Windows/Linux)를 누릅니다.\n\n3. ```\n          `move repeated calculations into functions`을 입력하고 <kbd>Enter</kbd> 키를 누릅니다.\n   ```\n\n   Copilot는 수정된 코드를 제안합니다. 예시:\n\n   ```javascript\n   function calculateSales(price, quantity) {\n     return price * quantity;\n   }\n\n   let totalSales = 0;\n\n   let applePrice = 3;\n   let applesSold = 100;\n   totalSales += calculateSales(applePrice, applesSold);\n\n   let orangePrice = 5;\n   let orangesSold = 50;\n   totalSales += calculateSales(orangePrice, orangesSold);\n\n   console.log(`Total: ${totalSales}`);\n   ```\n\n4. Copilot의 제안을 평가하고 변경에 동의하는 경우 다음을 수행합니다.\n\n   * **VS Code 및 Visual Studio에서:** **수락**을 클릭합니다.\n   * **JetBrains**: 미리 보기 아이콘(이중 화살표)을 클릭한 다음 모든 Diff 적용 아이콘(이중 꺾쇠 괄호)을 클릭합니다.\n\n모든 Copilot 제안과 마찬가지로 수정된 코드가 오류 없이 실행되고 올바른 결과를 생성하는지 항상 확인해야 합니다.\n\n## 코드를 보다 간결하게 만들기\n\n코드가 불필요하게 자세한 정보 표시하면 읽고 유지 관리하기가 어려울 수 있습니다. Copilot은(는) 선택한 코드의 보다 간결한 버전을 제안할 수 있습니다.\n\n다음 예제에서 이 Python 코드는 사각형 영역과 원을 출력하지만 더 간결하게 작성할 수 있습니다.\n\n```python\ndef calculate_area_of_rectangle(length, width):\n    area = length * width\n    return area\n\ndef calculate_area_of_circle(radius):\n    import math\n    area = math.pi * (radius ** 2)\n    return area\n\nlength_of_rectangle = 10\nwidth_of_rectangle = 5\narea_of_rectangle = calculate_area_of_rectangle(length_of_rectangle, width_of_rectangle)\nprint(f\"Area of rectangle: {area_of_rectangle}\")\n\nradius_of_circle = 7\narea_of_circle = calculate_area_of_circle(radius_of_circle)\nprint(f\"Area of circle: {area_of_circle}\")\n```\n\n1. 파일의 전체 내용을 선택합니다.\n\n2. 인라인 채팅 열기:\n\n   * **VS Code에서:** <kbd>Command</kbd>+<kbd>i</kbd>(Mac) 또는 <kbd>Ctrl</kbd>+<kbd>i</kbd>(Windows/Linux)를 누릅니다.\n   * **Visual Studio에서** <kbd>Alt</kbd>+<kbd>/</kbd>를 누릅니다.\n   * **JetBrains IDE에서:** <kbd>Control</kbd>+<kbd>Shift</kbd>+<kbd>i</kbd>(Mac) 또는 <kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>g</kbd>(Windows/Linux)를 누릅니다.\n\n3. ```\n          `make this more concise`을 입력하고 <kbd>Enter</kbd> 키를 누릅니다.\n   ```\n\n   Copilot는 수정된 코드를 제안합니다. 예시:\n\n   ```python\n   import math\n\n   def calculate_area_of_rectangle(length, width):\n     return length * width\n\n   def calculate_area_of_circle(radius):\n     return math.pi * (radius ** 2)\n\n   print(f\"Area of rectangle: {calculate_area_of_rectangle(10, 5)}\")\n   print(f\"Area of circle: {calculate_area_of_circle(7)}\")\n   ```\n\n4. Copilot의 제안을 평가하고 변경에 동의하는 경우 다음을 수행합니다.\n\n   * **VS Code 및 Visual Studio에서:** **수락**을 클릭합니다.\n   * **JetBrains**: 미리 보기 아이콘(이중 화살표)을 클릭한 다음 모든 Diff 적용 아이콘(이중 꺾쇠 괄호)을 클릭합니다.\n\n모든 Copilot 제안과 마찬가지로 수정된 코드가 오류 없이 실행되고 올바른 결과를 생성하는지 항상 확인해야 합니다.\n\n## 복잡한 코드 단위 분할\n\n여러 작업을 수행하는 대규모 메서드 또는 함수는 특정 작업을 수행하는 데 중점을 두는 더 작고 간단한 함수에 비해 재사용 기회가 적을 가능성이 높습니다. 또한 이해하고 디버그하기가 더 어려울 수 있습니다.\n\nCopilot은(는) 복잡한 코드 블록을 재사용에 더 적합한 더 작은 단위로 분할하는 데 도움이 될 수 있습니다.\n\n다음 Python 코드는 매우 간단한 예제이지만 단일 함수를 특정 작업을 수행하는 두 함수로 분할하는 원리를 보여줍니다.\n\n```python\nimport pandas as pd\nfrom pandas.io.formats.style import Styler\n\ndef process_data(item, price):\n    # Cleanse data\n    item = item.strip()  # Strip whitespace from item\n    price = price.strip()  # Strip whitespace from price\n    price = float(price) # Convert price to a float\n    # More cleansing operations here\n\n    # Create and print a DataFrame\n    data = {'Item': [item], 'Price': [price]}\n    df = pd.DataFrame(data)\n    print(df.to_string(index=False))\n\n# Example usage\nitem = \"   Apple \"\nprice = \" 1.25\"\nprocess_data(item, price)\n```\n\n```\n          `process_data` 함수를 분할하려면:\n```\n\n1. 함수 이름에 커서를 놓습니다.\n\n2. 인라인 채팅 열기:\n\n   * **VS Code에서:** <kbd>Command</kbd>+<kbd>i</kbd>(Mac) 또는 <kbd>Ctrl</kbd>+<kbd>i</kbd>(Windows/Linux)를 누릅니다.\n   * **Visual Studio에서** <kbd>Alt</kbd>+<kbd>/</kbd>를 누릅니다.\n   * **JetBrains IDE에서:** <kbd>Control</kbd>+<kbd>Shift</kbd>+<kbd>i</kbd>(Mac) 또는 <kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>g</kbd>(Windows/Linux)를 누릅니다.\n\n3. ```\n          `split into 2 separate functions: one for cleansing data, the other for printing`을 입력하고 <kbd>Enter</kbd> 키를 누릅니다.\n   ```\n\n   Copilot는 수정된 코드를 제안합니다. 예시:\n\n   ```python\n   def cleanse_data(item, price):\n     # Cleanse data\n     item = item.strip()  # Strip whitespace from item\n     price = price.strip()  # Strip whitespace from price\n     price = float(price)  # Convert price to a float\n     return item, price\n\n   def print_data(item, price):\n     # Create and print a DataFrame\n     data = {'Item': [item], 'Price': [price]}\n     df = pd.DataFrame(data)\n     print(df.to_string(index=False))\n\n   def process_data(item, price):\n     item, price = cleanse_data(item, price)\n     print_data(item, price)\n   ```\n\n   > \\[!NOTE] 위에 표시된 제안 예시는 기존 함수를 세 개의 함수로 바꿉니다. 세 번째 함수는 단순히 다른 두 함수를 호출하고 `process_data` 함수를 호출하는 기존 코드를 허용합니다.\n\n4. Copilot의 제안을 평가하고 변경에 동의하는 경우 다음을 수행합니다.\n\n   * **VS Code 및 Visual Studio에서:** **수락**을 클릭합니다.\n   * **JetBrains**: 미리 보기 아이콘(이중 화살표)을 클릭한 다음 모든 Diff 적용 아이콘(이중 꺾쇠 괄호)을 클릭합니다.\n\n모든 Copilot 제안과 마찬가지로 수정된 코드가 오류 없이 실행되고 올바른 결과를 생성하는지 항상 확인해야 합니다.\n\n## 가독성을 높이기 위해 조건부 코드를 다시 작성합니다.\n\n다양한 조건에 따라 실행되거나 실행되지 않는 코드를 작성하는 방법에는 여러 가지가 있습니다. 일부 조건부 구조는 다른 조건부 구조보다 특정 사용 사례에 더 적합하며, 대체 조건부 구조를 선택할 때 코드를 더 쉽게 읽을 수 있는 경우가 있습니다.\n\n이 Java 메서드는 일련의 `if` 문과 `else if` 문을 사용하여 수행할 작업을 결정합니다.\n\n```java\npublic String getSound(String animal) {\n  if (animal == null) {\n      System.out.println(\"Oops! A null animal?\");\n  } else if (animal.equalsIgnoreCase(\"Dog\")) {\n      return \"Bark\";\n  } else if ( animal.equalsIgnoreCase(\"Cat\")) {\n      return \"Meow\";\n  } else if ( animal.equalsIgnoreCase(\"Bird\")) {\n      return \"Tweet\";\n  }\n  return \"Unknown\";\n}\n```\n\n```\n          `switch` 문은 동일한 논리를 적용하는 더 나은 방법이 될 수 있습니다.\n```\n\n1. 메서드 이름에 커서를 놓습니다.\n\n2. 인라인 채팅 열기:\n\n   * **VS Code에서:** <kbd>Command</kbd>+<kbd>i</kbd>(Mac) 또는 <kbd>Ctrl</kbd>+<kbd>i</kbd>(Windows/Linux)를 누릅니다.\n   * **Visual Studio에서** <kbd>Alt</kbd>+<kbd>/</kbd>를 누릅니다.\n   * **JetBrains IDE에서:** <kbd>Control</kbd>+<kbd>Shift</kbd>+<kbd>i</kbd>(Mac) 또는 <kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>g</kbd>(Windows/Linux)를 누릅니다.\n\n3. 유형: `rewrite the condition to use a switch and use Java 21 syntax with null case, but also add documentation and provide a better function name`.\n\n   단일 프롬프트를 사용하여 Copilot에게 여러 가지 변경을 요청할 수 있는 방법을 보여줍니다.\n\n4. ```\n          <kbd>Enter</kbd> 키를 누릅니다.\n   ```\n\n   Copilot는 수정된 코드를 제안합니다. 예시:\n\n   ```java\n   /**\n    * Retrieves the sound made by a given animal.\n    * * @param animal The name of the animal.\n    * @return The sound made by the animal, or \"Unknown\" if the animal is not recognized.\n    */\n   public String getAnimalSound(String animal) {\n       return switch (animal) {\n           case null -> {\n               System.out.println(\"Oops! A null animal?\");\n               yield \"Unknown\";\n           }\n           case String a when a.equalsIgnoreCase(\"Dog\") -> \"Bark\";\n           case String a when a.equalsIgnoreCase(\"Cat\") -> \"Meow\";\n           case String a when a.equalsIgnoreCase(\"Bird\") -> \"Tweet\";\n           default -> \"Unknown\";\n       };\n   }\n   ```\n\n5. Copilot의 제안을 평가하고 변경에 동의하는 경우 다음을 수행합니다.\n\n   * **VS Code 및 Visual Studio에서:** **수락**을 클릭합니다.\n   * **JetBrains**: 미리 보기 아이콘(이중 화살표)을 클릭한 다음 모든 Diff 적용 아이콘(이중 꺾쇠 괄호)을 클릭합니다.\n\n모든 Copilot 제안과 마찬가지로 수정된 코드가 오류 없이 실행되고 올바른 결과를 생성하는지 항상 확인해야 합니다.\n\n## 다른 구조를 사용하도록 코드 서식 다시 지정\n\nJavaScript에 이 함수가 있다고 가정해 보겠습니다.\n\n```javascript\nfunction listRepos(o, p) {\n return fetch(`https://api.github.com/orgs/${o}/repos?per_page=${parseInt(p)}`)\n   .then((response) => response.json())\n   .then( (data) => data);\n}\n```\n\n코딩 표준에서 함수에 화살표 표기법과 매개 변수에 대한 설명이 포함된 이름을 사용해야 하는 경우 Copilot을(를) 사용하여 이러한 변경을 수행할 수 있습니다.\n\n1. 함수 이름에 커서를 놓습니다.\n2. 인라인 채팅 열기:\n\n   * **VS Code에서:** <kbd>Command</kbd>+<kbd>i</kbd>(Mac) 또는 <kbd>Ctrl</kbd>+<kbd>i</kbd>(Windows/Linux)를 누릅니다.\n   * **Visual Studio에서** <kbd>Alt</kbd>+<kbd>/</kbd>를 누릅니다.\n   * **JetBrains IDE에서:** <kbd>Control</kbd>+<kbd>Shift</kbd>+<kbd>i</kbd>(Mac) 또는 <kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>g</kbd>(Windows/Linux)를 누릅니다.\n3. ```\n          `use arrow notation and better parameter names`을 입력하고 <kbd>Enter</kbd> 키를 누릅니다.\n   ```\n\n   Copilot는 수정된 코드를 제안합니다. 예시:\n\n   ```javascript\n   const listRepos = (org, perPage) => {\n     return fetch(`https://api.github.com/orgs/${org}/repos?per_page=${parseInt(perPage)}`)\n       .then(response => response.json())\n       .then(data => data);\n   };\n   ```\n\n## 기호 이름 개선\n\n> \\[!NOTE]\n>\n> * VS Code 및 Visual Studio만 해당됩니다.\n> * 이 기능의 지원 여부는 사용 중인 언어에 적합한 언어 확장 프로그램이 IDE에 설치되어 있는지에 따라 달라집니다. 모든 언어 확장이 이 기능을 지원하는 것은 아닙니다.\n\n이름을 잘 선택하면 코드를 더 쉽게 유지 관리할 수 있습니다. Copilot와 VS Code의 Visual Studio는 변수나 함수 같은 기호에 대해 다른 이름을 제안할 수 있습니다.\n\n1. 기호 이름에 커서를 놓습니다.\n\n2. ```\n          <kbd>F2</kbd> 키를 누릅니다.\n   ```\n\n3. ```\n          **Visual Studio만 해당:**<kbd>Ctrl</kbd>+<kbd>Space</kbd>를 누릅니다.\n   ```\n\n   Copilot은(는) 대체 이름을 제안합니다.\n\n   ![기호 이름에 대한 대안을 제공하는 VS Code의 드롭다운 목록 스크린샷.](/assets/images/help/copilot/rename-symbol.png)\n\n4. 드롭다운 목록에서 제안된 이름 중 하나를 선택합니다.\n\n   이름은 project 전체에서 변경됩니다."}