-
[CS 지식] 디자인패턴. 디자인패턴 정의 & 싱글톤 패턴CS 지식 2023. 4. 15. 11:48
디자인 패턴
💡 프로그램을 설계할 때 발생했던 문제점들을 객체 간의 상호 관계 등을 이용하여 해결할 수 있도록 하나의 규약 형태로 만들어 놓은 것
• 설계자로 하여금 재사용이 가능한 설계는 선택하고 재사용을 방해하는 설계는 배제하도록 도와줌
• 패턴을 쓰면 이미 만든 시스템의 유지보수나 문서화도 개선할 수 있고 클래스의 명세도 정확하게 할 수 있음
• 객체 간의 상호작용 또는 설계 의도까지 명확하게 정의할 수 있음
디자인 패턴의 카테고리
⭐️ 생성 패턴
(Creational Pattern)구조 패턴
(Structural Pattern)행동 패턴
(Behavioral Pattern)카테고리 별
패턴 종류Singleton
Abstract Factory
Factory Method
Builder
PrototypeAdapter
Composite
Decorator
Facade
Flyweight
ProxyCommand
Interpreter
Iterator
Mediator
Memento
Observer
State
Strategy
Template Method싱글톤 패턴 (Single Pattern)
이미지 출처 : https://velog.io/@dolarge/디자인-패턴-Singleton-Pattern 💡 하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴
• 하나의 클래스를 기반으로 단 하나의 인스턴스를 만들어 이를 기반으로 로직을 만드는 데 쓰임
• 보통 데이터베이스 연결 모듈에 많이 사용
❓ 클래스, 객체, 인스턴스
• 클래스 (Class) : 프로그래밍상 정의되어 있는 데이터와 메서드의 집합
• 객체 (Object) : 인스턴스화를 위해 리턴된 값
• 인스턴스 (Instance) : 생성된 결과물❓ 모듈과 모듈화
• 모듈 (Module) : 프로그램을 구성하는 시스템을 기능 단위로 독립적인 부분으로 분리한 것
• 모듈화 (Modularization) : 기능적인 분리를 통해서 다른 프로그램을 개발할 때에도 유지보수와 코드 재사용성을 높여 소프트웨어를 설계하는 기법싱글톤 패턴의 장점
하나의 인스턴스를 만들어 놓고 해당 인스턴스를 다른 모듈들이 공유하며 사용하기 때문에 인스턴스를 생성할 때 드는 비용이 줄어듬
➡️ 사용하기가 쉽고 굉장히 실용적임
싱글톤 패턴의 단점
• TDD (Test Driven Development)를 할 때 걸림돌이 됨
TDD를 할 때 단위 테스트를 주로 하는데 단위 테스트는 테스트가 서로 독립적이어야 하며 테스트를 어떤 순서로든 실행할 수 있어야 함. 하지만 싱글톤 패턴은 미리 생성된 하나의 인스턴스를 기반으로 구현하는 패턴이므로 각 테스트마다 독립적인 인스턴스를 만들기가 어려움
• 모듈 간의 결합을 강하게 만들 수 있음
의존성 주입 (DI, Dependency Injection)을 통해 해결할 수 있음
❓ 의존성 : 종속성 이라고도 하며 A가 B에 의해 의존성이 있다는 것은 B의 변경 사항에 대해 A 또한 변해야 된다는 것을 의미
메인 모듈 (main module)이 직접 다른 하위 모듈에 대한 의존성을 주기보다는 중간에 의존성 주입자 (dependency Injector)가 이 부분을 가로채 메인 모듈이 간접 적으로 의존성을 주입하는 방식
✅ 이를 통해 메인 모듈 (상위 모듈)은 하위 모듈에 대한 의존성이 떨어짐 ➡️ 디커플링이 된다고도 함
이미지 출처 : https://velog.io/@tiger/CS-싱글톤-패턴-의존성-주입 의존성 주입의 장점
• 모듈들을 쉽게 교체할 수 있는 구조가 되어 테스팅하기 쉽고 마이그레이션하기도 수월함
❓ 마이그레이션 (migration) : 데이터나 소프트웨어를 한 시스템에서 다른 시스템으로 이동하는 것
• 구현할 때 추상화 레이어를 넣고 이를 기반으로 구현체를 넣어 주기 때문에 애플리케이션 의존성 방향이 일관되고 애플리케이션을 쉽게 추론할 수 있으며 모듈 간의 관계들이 조금 더 명확해짐
의존성 주입의 단점
모듈들이 더욱더 분리되므로 클래스 수가 늘어나 복잡성이 증가될 수 있으며 약간의 런타임 패널티가 생기기도 함
의존성 주입 원칙
1. 상위 모듈은 하위 모듈에서 어떠한 것도 가져오지 않아야 함
2. 둘 다 추상화에 의존해야 하며 이때 추상화는 세부 사항에 의존하지 말아야 함
⭐️ 의존성 주입 원칙을 지키면서 만들어야 함 !
자바스크립트의 싱글톤 패턴
자바스크립트에서는 리터럴{ } 또는 new Object로 객체를 생성하게 되면 다른 어떤 객체와도 같지 않기 때문에 이 자체만으로 싱글톤 패턴을 구현할 수 있음
const obj = { a: 27 } const obj2 = { a: 27 } console.log(obj === obj2) // false
➡️ 위 코드에서 볼 수 있듯이 obj와 obj2는 다른 인스턴스를 가짐. 이 또한 new Object 라는 클래스에서 나온 단 하나의 인스턴스니 어느 정도 싱글톤 패턴이라 볼 수 있지만 실제 싱글톤 패턴은 보통 아래와 같은 코드로 구성됨
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
✅ Singleton.instance 라는 하나의 인스턴스를 가지는 Singleton 클래스를 구현. 이를 통해 a와 b는 하나의 인스턴스를 가짐
📌 Reference
📗 Book : 면접을 위한 CS 전공지식 노트
디자인 패턴(Design Pattern)이란?
객체지향 소프트웨어를 '잘' 설계한다는 것은 쉬운 일이 아닙니다. 게다가, 재사용할 수 있는 객체지향 소프트웨어를 만드는 것은 더 힘듭니다. 설계를 할 때에는 지금 당장 갖고 있는 문제를 해
readystory.tistory.com
클래스, 객체, 인스턴스
객체는 뭐고 객체는 뭐고 인스턴스는 뭔가? 그리고 클래스는 또 뭘까? 흔히들 클래스를 객체화한다거나 클래스를 인스턴스화 한다는 표현을 사용한다. 클래스는 말그대로 프로그래밍상 정의되
findmypiece.tistory.com
모듈(Module)과 모듈화(Modularization)
모듈이란 프로그램을 구성하는 시스템을 기능 단위로 독립적인 부분으로 분리한 것이다. 단순히 규모가 큰 것을 작게 여러 개로 나눈 조각이 아니라, 하나 이상의 논리적인 기능을 수행하기 위
velog.io
'CS 지식' 카테고리의 다른 글
[CS 지식] 디자인패턴. 팩토리 패턴 (0) 2023.04.27