설정된 디자인 패턴(예: 싱글톤, 팩터리, 옵서버)을 따르지 않는 코드는 긴밀한 결합, 유연성 부족, 중복된 코드와 같은 문제를 야기할 수 있습니다.
Copilot Chat를 사용하면 적절한 디자인 패턴을 사용하여 코드를 보다 유연하고 유지 관리할 수 있습니다. 예를 들어 반복 인스턴스화를 팩터리 패턴으로 변환하거나 관찰자 패턴을 사용하여 긴밀하게 연결된 클래스를 분리하는 것이 좋습니다.
Note
이 문서에 설명된 응답은 예제입니다. Copilot Chat 응답은 비결정적이므로 여기에 표시된 응답과 다른 응답을 얻을 수 있습니다.
예제 시나리오
이 JavaScript 코드는 각각 name
및 age
속성을 사용하여 Person
개체 세 개를 만듭니다. 그런 다음, 사람의 이름을 사용하여 나이를 검색하고 인쇄합니다.
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
}
var people = {};
function addPerson(name, age) {
people[name] = new Person(name, age);
}
function getAge(name) {
if (people[name]) {
console.log(name + " is " + people[name].age + " years old.");
} else {
console.log("Person not found.");
}
}
addPerson("Ana", 30);
addPerson("Mario", 25);
addPerson("Louise", 40);
getAge("Mario");
예제 프롬프트 1
What design patterns could improve this code? Don't show me code examples.
예제 응답 1
Copilot는 다음과 같은 패턴을 제안합니다.
- 싱글톤 패턴:
people
개체의 인스턴스가 하나만 있는지 확인합니다. - 팩터리 패턴:
Person
개체를 만들기 위한 팩터리를 만듭니다. - 모듈 패턴: 전역 네임스페이스를 오염하지 않도록 모듈 내의
people
개체와 관련 함수를 캡슐화합니다.
예제 프롬프트 2
이제 Copilot에게 가장 적절하다고 생각되는 패턴을 구현하도록 요청할 수 있습니다.
Refactor this code using the module pattern
예제 응답 2
const PersonModule = (function() {
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
}
const people = {};
function addPerson(name, age) {
people[name] = new Person(name, age);
}
function getAge(name) {
if (people[name]) {
console.log(name + " is " + people[name].age + " years old.");
} else {
console.log("Person not found.");
}
}
return {
addPerson,
getAge
};
})();
PersonModule.addPerson("Ana", 30);
PersonModule.addPerson("Mario", 25);
PersonModule.addPerson("Louise", 40);
PersonModule.getAge("Mario");
모듈 패턴은 코드 조직을 개선하고, 데이터 개인 정보를 향상하며, 명명 충돌 위험을 줄여 코드를 보다 유지 관리하고 확장성 있게 만듭니다.