상세 컨텐츠

본문 제목

디자인 패턴 정리 (싱글톤 패턴, 팩토리 패턴)

CS

by 초코순쌀과자 2024. 8. 27. 21:04

본문

오늘 학습한 내용을 간단히 정리해 볼까 한다. 사용된 예제코드의 출처는 (면접을 위한 CS 전공지식 노트 by 주홍철) 책으로, 면접 뿐 아니라 CS 전반적인 지식을 학습하기에 아주 좋은 책이라 생각한다.

 

싱글톤 패턴

개요: 하나의 클래스당 하나의 인스턴스를 생성하는 디자인 패턴

특징: 인스턴스를 하나만 생성해도 되기 때문에 리소스를 적게 먹는다, 하나의 인스턴스에 대해 의존성이 커진다.

(의존성: A가 B에 의존성이 있다 -> B의 변경 사항에 대해 A 또한 변경되어야 하는 부분이 있다)

예제 코드

class Singleton {
    constructor() {
        if (!Singleton.instance) {
            Singleton.instance = this
        }
        return Singleton.instance
    }

    getInstance() {
        return this.instance
    }
}

const a = new Singleton()
const b = new Singleton()
console.log(a === b) // a와 b는 동일한 인스턴스를 지니므로 비교시 동일함을 리턴함

 

팩토리 패턴

개요: 상하관계가 있는 두 개의 클래스에 대해 상위 클래스에선 전체 그림을, 하위 클래스에선 세부적인 내용을 지정해주는 디자인 패턴

특징: 상위-하위 클래스의 분리로 인한 유연성 증가, 객체 생성 로직의 분리로 인한 유지보수성 증가

예제 코드

class Latte {
    constructor() {
        this.name = 'latte'
    }
}

class Espresso {
    constructor() {
        this.name = 'espresso'
    }
}

class LatteFactory {
    static createCoffee() { // static 메소드는 정적 메소드로, 인스턴스를 생성하지 않아도 메소드를 호출할 수 있음.
        return new Latte()
    }
}

class EspressoFactory {
    static createCoffee() {
        return new Espresso()
    }
}

const factoryList = { LatteFactory, EspressoFactory }

class CoffeeFactory {
    static createCoffee(type) {
        const factory = factoryList[type]
        return factory.createCoffee()
    }
}

const main = () => {
    // 라떼 커피 주문
    const coffee = CoffeeFactory.createCoffee("LatteFactory")

    // 커피 이름을 부름
    console.log(coffee.name)
}

main()

'CS' 카테고리의 다른 글

데이터 모델링과 정규화  (1) 2025.02.05
디자인 패턴 정리 (MVC 패턴, MVVM 패턴)  (2) 2024.08.28

관련글 더보기

댓글 영역