{"meta":{"title":"성능 최적화를 위한 리팩터링","intro":"공동 파일럿 채팅은 느리게 실행되는 코드를 가속화하는 방법을 제안할 수 있습니다.","product":"GitHub Copilot","breadcrumbs":[{"href":"/ko/copilot","title":"GitHub Copilot"},{"href":"/ko/copilot/tutorials","title":"자습서"},{"href":"/ko/copilot/tutorials/copilot-chat-cookbook","title":"GitHub Copilot Chat 매뉴얼"},{"href":"/ko/copilot/tutorials/copilot-chat-cookbook/refactor-code","title":"코드 리팩터링"},{"href":"/ko/copilot/tutorials/copilot-chat-cookbook/refactor-code/refactor-for-optimization","title":"최적화를 위한 리팩터링"}],"documentType":"article"},"body":"# 성능 최적화를 위한 리팩터링\n\n공동 파일럿 채팅은 느리게 실행되는 코드를 가속화하는 방법을 제안할 수 있습니다.\n\n기존 코드는 제대로 작동하지만, 비효율적일 수 있으므로 성능 병목 현상이 발생합니다. 성능에 부정적인 영향을 줄 수 있는 코딩의 예로는 비효율적인 루프, 불필요한 계산, 과도한 메모리 할당이 있습니다.\n\n공동 파일럿 채팅은 성능 핫스팟을 식별하고 데이터 구조 최적화(예: 배열 대신 해시맵 사용), 중복 계산 감소, 알고리즘 효율성 향상과 같은 리팩터링 전략을 제안할 수 있습니다. 또한 성능을 향상하기 위해 캐싱 메커니즘이나 병렬 작업을 권장할 수 있습니다.\n\n## 예제 시나리오\n\n다음 Python 코드는 최대 10,000번째 소수까지 매 1,000번째 소수를 출력합니다. 타이머를 포함하고 코드가 출력의 마지막 줄로 실행되는 데 걸리는 시간을 출력합니다. 프로그램을 완료하는 데 몇 초 정도 걸립니다.\n\n```python id=slow-prime\nimport time\n\ndef is_prime(n):\n    if n <= 1:\n        return False\n    for i in range(2, n):\n        if n % i == 0:\n            return False\n    return True\n\ndef every_1000th_prime():\n    primes = []\n    num = 2\n    while len(primes) < 10000:\n        if is_prime(num):\n            primes.append(num)\n        num += 1\n    return [primes[i] for i in range(999, 10000, 1000)]\n\nif __name__ == \"__main__\":\n    start_time = time.time()\n    primes = every_1000th_prime()\n    for prime in primes:\n        print(prime)\n    end_time = time.time()\n    elapsed_time = end_time - start_time\n    print(f\"Time taken: {elapsed_time:.10f} seconds\")\n```\n\n## 예시 프롬프트\n\n```copilot copy prompt ref=slow-prime\nOptimize this code for performance\n```\n\n## 예제 응답\n\nCopilot는 체 함수를 활용하면 소수를 훨씬 더 효율적으로 생성할 수 있다고 제안합니다. 이 프로그램을 실행하면 잠시 후에 완료됩니다.\n\n> \\[!NOTE] 공동 파일럿 채팅 응답은 비결정적이므로 여기에 표시된 응답과 다른 응답을 얻을 수 있습니다.\n\n```python\nimport time\n\ndef sieve_of_eratosthenes(limit):\n    sieve = [True] * (limit + 1)\n    sieve[0] = sieve[1] = False\n    for start in range(2, int(limit**0.5) + 1):\n        if sieve[start]:\n            for multiple in range(start*start, limit + 1, start):\n                sieve[multiple] = False\n    return [num for num, is_prime in enumerate(sieve) if is_prime]\n\ndef every_1000th_prime():\n    limit = 105000  # Higher than needed to ensure 10,000 primes\n    primes = sieve_of_eratosthenes(limit)\n    return [primes[i] for i in range(999, 10000, 1000)]\n\nif __name__ == \"__main__\":\n    start_time = time.time()\n    primes = every_1000th_prime()\n    for prime in primes:\n        print(prime)\n    end_time = time.time()\n    elapsed_time = end_time - start_time\n    print(f\"Time taken: {elapsed_time:.10f} seconds\")\n```\n\n## 추가 참고 자료\n\n* [GitHub Copilot 채팅에 대한 프롬프트 엔지니어링](/ko/copilot/using-github-copilot/prompt-engineering-for-github-copilot)\n* [GitHub 부필로트 사용에 대한 모범 사례](/ko/copilot/using-github-copilot/best-practices-for-using-github-copilot)"}