ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [CS 지식] 디자인패턴. 디자인패턴 정의 & 싱글톤 패턴
    CS 지식 2023. 4. 15. 11:48

    디자인 패턴

    💡 프로그램을 설계할 때 발생했던 문제점들을 객체 간의 상호 관계 등을 이용하여 해결할 수 있도록 하나의 규약 형태로 만들어 놓은 것

     

    • 설계자로 하여금 재사용이 가능한 설계는 선택하고 재사용을 방해하는 설계는 배제하도록 도와줌

    • 패턴을 쓰면 이미 만든 시스템의 유지보수나 문서화도 개선할 수 있고 클래스의 명세도 정확하게 할 수 있음

    • 객체 간의 상호작용 또는 설계 의도까지 명확하게 정의할 수 있음

    디자인 패턴의 카테고리

    ⭐️ 생성 패턴
    (Creational Pattern)
    구조 패턴
    (Structural Pattern)
    행동 패턴
    (Behavioral Pattern)
    카테고리 별
    패턴 종류
    Singleton
    Abstract Factory
    Factory Method
    Builder
    Prototype
    Adapter
    Composite
    Decorator
    Facade
    Flyweight
    Proxy
    Command
    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
Designed by Tistory.