디자인 패턴
객체 간의 상호 관계를 이용하여 프로그램을 설계할 때 발생하는 문제를 해결하기 위해, 암호 형태로 만든
• 디자이너가 재사용을 허용하는 디자인을 선택하고 재사용을 방해하는 디자인을 제외하도록 돕습니다.
• 패턴을 사용하면 이미 생성된 시스템의 유지 관리 및 문서화를 개선하고 클래스 사양을 보다 정확하게 만들 수 있습니다.
• 개체 또는 설계 의도 간의 상호 작용을 명확하게 정의할 수 있습니다.
디자인 패턴의 범주
| 생성 패턴 (창작 패턴) |
구조 패턴 (구조 패턴) |
행동 패턴 (행동 패턴) |
|
| 카테고리별 패턴 유형 |
하나씩 일어나는 것 추상 공장 공장 방법 빌더 원기 |
어댑터 합성물 데코레이터 정면 플라이급 대리 |
명령 통역사 반복자 중재인 기념물 관찰자 상태 전략 템플릿 방법 |
단일 패턴

클래스 인스턴스가 하나만 있는 패턴
• 하나의 수업단 하나를 기준으로 사례이를 기반으로 논리를 만드는 데 사용됩니다.
• 정상적인 데이터베이스 연결 기준 치수에서 많이 사용
클래스, 객체, 인스턴스
• 수업 : 프로그래밍 방식으로 정의된 데이터 및 메서드 집합
• 객체(Object): 인스턴스화를 위해 반환되는 값
• 사례 : 생성된 결과
모듈 및 모듈화
• 기준 치수 : 프로그램을 구성하는 시스템을 기능 단위별로 독립된 부분으로 나눈다.
• 모듈화(Modularization): 기능 분리를 통해 다른 프로그램을 개발할 때에도 유지보수성과 코드 재사용성을 높여 소프트웨어를 설계하는 기법.
싱글톤 패턴의 장점
하나의 인스턴스가 생성되고 다른 모듈에서 인스턴스를 공유하여 사용하므로 인스턴스 생성 비용이 절감됩니다.
사용하기 쉽고 매우 실용적입니다.
싱글톤 패턴의 단점
• TDD(Test Driven Development)를 할 때 걸림돌
TDD를 할 때 단위 테스트를 주로 한다. 단위 테스트는 서로 독립적이어야 하며 테스트는 어떤 순서로든 실행할 수 있습니다. 그러나 싱글톤 패턴은 미리 생성된 하나의 인스턴스를 기반으로 구현되기 때문에 테스트마다 독립적인 인스턴스를 생성하기 어렵다.
• 모듈 간의 결합을 더 강하게 만들 수 있습니다.
의존 의존성 주입(DI, 의존성 주입)통해 해결할 수 있습니다.
의존 종속성이라고도 하며 A가 B에 종속되어 있으면 B가 변경되면 A도 변경되어야 함을 의미합니다.
메인 모듈 곧장 다른 서브모듈에 의존성을 부여하기보다 의존성 주입기가 중간에 이 부분을 가로채서 메인 모듈이 된다. 간접 의존성을 주입하는 방법
이것은 하위 모듈에 대한 메인 모듈(상위 모듈)의 종속성을 줄입니다. 디커플링이라고도 합니다.

의존성 주입의 장점
• 모듈 교체가 용이한 구조로 되어 있어 테스트가 용이합니다. 이주하기 쉬운
이주): 한 시스템에서 다른 시스템으로 데이터 또는 소프트웨어의 이동
• 추상화 계층을 구현하고 이를 기반으로 구현하면 애플리케이션 종속성 방향이 일관되고 애플리케이션을 쉽게 유추할 수 있으며 모듈 간의 관계가 조금 더 명확해집니다.
의존성 주입의 단점
모듈은 더욱 분리되어 클래스 수를 늘려 복잡성을 증가시키고 일부 런타임 페널티를 발생시킬 수 있습니다.
종속성 주입 원리
1. 상위 모듈은 하위 모듈에서 아무 것도 가져오지 않아야 합니다.
2. 둘 다 추상화에 의존해야 하며 추상화는 세부 사항에 의존해서는 안 됩니다.
의존성 주입 원칙을 지키며 생성되어야 합니다!
JavaScript의 싱글톤 패턴
자바스크립트에서 리터럴 { } 또는 새 개체로 객체를 생성하면 다른 객체와 같지 않기 때문에 스스로 싱글톤 패턴을 구현할 수 있습니다.
const obj = {
a: 27
}
const obj2 = {
a: 27
}
console.log(obj === obj2) // false
위의 코드에서 볼 수 있듯이 obj와 obj2는 인스턴스가 다릅니다. 이거 역시 새 개체 호출된 클래스의 인스턴스가 하나뿐이기 때문에 어느 정도 싱글톤 패턴으로 볼 수 있지만 실제 싱글톤 패턴은 보통 아래의 코드로 구성됩니다.
class Singleton {
constructor() {
if(!Singleton.instance) {
Singelton.instance = this
}
return Singleton.instance
}
getInstance() {
return this.instance
}
}
const a = new Singleton()
const b = new Singleton()
console.log(a === b) // true
싱글톤.인스턴스 하나의 인스턴스로 하나씩 일어나는 것 클래스를 구현합니다. 이렇게 하면 a와 b가 하나의 인스턴스를 가질 수 있습니다.
참조
도서 : 면접을 위한 CS전공 지식노트
디자인 패턴이란 무엇입니까?
객체 지향 소프트웨어를 ‘잘’ 설계하는 것은 쉬운 일이 아닙니다. 게다가 재사용 가능한 객체 지향 소프트웨어를 작성하는 것이 더 어렵습니다. 디자인할 때 지금 당장 가지고 있는 문제를 해결하십시오.
readystory.tistory.com
클래스, 객체, 인스턴스
개체 란 무엇이며 개체 란 무엇이며 인스턴스 란 무엇입니까? 수업은 어떻습니까? 일반적으로 클래스를 객체화하거나 클래스를 인스턴스화하는 표현을 사용합니다. 클래스는 프로그래밍 방식으로 정의됩니다.
findmypiece.tistory.com
모듈과 모듈화
모듈은 기능 단위로 독립된 부분으로 나누어진 프로그램을 구성하는 시스템입니다. 단순히 큰 것을 여러 개의 작은 조각으로 나누는 것이 아니라 하나 이상의 논리적 기능을 수행하는 것입니다.
velog.io

