{"meta":{"title":"디자인 패턴을 구현하기 위한 리팩터링","intro":"Copilot Chat 에서는 코드를 개선하는 데 사용할 수 있는 디자인 패턴을 제안할 수 있습니다.","product":"GitHub Copilot","breadcrumbs":[{"href":"/ko/copilot","title":"GitHub Copilot"},{"href":"/ko/copilot/tutorials","title":"자습서"},{"href":"/ko/copilot/tutorials/copilot-cookbook","title":"GitHub Copilot 활용 안내서"},{"href":"/ko/copilot/tutorials/copilot-cookbook/refactor-code","title":"코드 리팩터링"},{"href":"/ko/copilot/tutorials/copilot-cookbook/refactor-code/refactor-design-patterns","title":"디자인 패턴 리팩터링"}],"documentType":"article"},"body":"# 디자인 패턴을 구현하기 위한 리팩터링\n\nCopilot Chat 에서는 코드를 개선하는 데 사용할 수 있는 디자인 패턴을 제안할 수 있습니다.\n\n설정된 디자인 패턴(예: 싱글톤, 팩터리, 옵서버)을 따르지 않는 코드는 긴밀한 결합, 유연성 부족, 중복된 코드와 같은 문제를 야기할 수 있습니다.\n\nCopilot Chat 에서는 적절한 디자인 패턴을 사용하여 코드를 보다 유연하고 유지 관리할 수 있도록 할 수 있습니다. 예를 들어 반복 인스턴스화를 팩터리 패턴으로 변환하거나 관찰자 패턴을 사용하여 긴밀하게 연결된 클래스를 분리하는 것이 좋습니다.\n\n> \\[!NOTE] 이 문서에 설명된 응답은 예제입니다.\n> Copilot Chat 응답은 비결정적이므로 여기에 표시된 응답과 다른 응답을 얻을 수 있습니다.\n\n## 예제 시나리오\n\n이 JavaScript 코드는 각각 `Person` 및 `name` 속성을 사용하여 `age` 개체 세 개를 만듭니다. 그런 다음, 사람의 이름을 사용하여 나이를 검색하고 인쇄합니다.\n\n```javascript id=person-module\nclass Person {\n  constructor(name, age) {\n    this.name = name;\n    this.age = age;\n  }\n}\n\nvar people = {};\n\nfunction addPerson(name, age) {\n  people[name] = new Person(name, age);\n}\n\nfunction getAge(name) {\n  if (people[name]) {\n    console.log(name + \" is \" + people[name].age + \" years old.\");\n  } else {\n    console.log(\"Person not found.\");\n  }\n}\n\naddPerson(\"Ana\", 30);\naddPerson(\"Mario\", 25);\naddPerson(\"Louise\", 40);\n\ngetAge(\"Mario\");\n```\n\n## 예제 프롬프트 1\n\n```copilot copy prompt ref=person-module\nWhat design patterns could improve this code? Don't show me code examples.\n```\n\n## 예제 응답 1\n\nCopilot 에서는 다음 패턴을 제안합니다.\n\n* **싱글톤 패턴**: `people` 개체의 인스턴스가 하나만 있는지 확인합니다.\n* **팩터리 패턴**: `Person` 개체를 만들기 위한 팩터리를 만듭니다.\n* **모듈 패턴**: 전역 네임스페이스를 오염하지 않도록 모듈 내의 `people` 개체와 관련 함수를 캡슐화합니다.\n\n## 예제 프롬프트 2\n\n이제 가장 적절하다고 생각되는 패턴을 구현하도록 요청할 Copilot 수 있습니다.\n\n```copilot copy prompt ref=person-module\nRefactor this code using the module pattern\n```\n\n## 예제 응답 2\n\n```javascript\nconst PersonModule = (function() {\n  class Person {\n    constructor(name, age) {\n      this.name = name;\n      this.age = age;\n    }\n  }\n\n  const people = {};\n\n  function addPerson(name, age) {\n    people[name] = new Person(name, age);\n  }\n\n  function getAge(name) {\n    if (people[name]) {\n      console.log(name + \" is \" + people[name].age + \" years old.\");\n    } else {\n      console.log(\"Person not found.\");\n    }\n  }\n\n  return {\n    addPerson,\n    getAge\n  };\n})();\n\nPersonModule.addPerson(\"Ana\", 30);\nPersonModule.addPerson(\"Mario\", 25);\nPersonModule.addPerson(\"Louise\", 40);\n\nPersonModule.getAge(\"Mario\");\n```\n\n모듈 패턴은 코드 조직을 개선하고, 데이터 개인 정보를 향상하며, 명명 충돌 위험을 줄여 코드를 보다 유지 관리하고 확장성 있게 만듭니다.\n\n## 추가 읽기\n\n* [GitHub Copilot 채팅에 대한 프롬프트 엔지니어링](/ko/copilot/concepts/prompting/prompt-engineering)\n* [GitHub 부필로트 사용에 대한 모범 사례](/ko/copilot/get-started/best-practices)"}