💻 CS

11. 팩토리, 이터레이터 패턴

elffffy 2026. 6. 20. 23:34
※ 이 글은 인프런 강의를 수강하며
개인 학습 목적으로 이해한 내용을 정리한 글입니다.

 

1️⃣ 팩토리 패턴

상속 관계에 있는 두 클래스에 상위 클래스가 중요한 뼈대를 결정하고,
하위 클래스에서 객체 생성에 관한 구체적인 내용을 결정하는 패턴

 

쉽게 말해서, 사장님이 "OO 회사에 알림 보내" 라고만 지시만 했다고 가정을 해보자.
이메일 담당자는 이메일로, SMS 담당자는 문자로 보낼 것이다.

 

그러면, PM 입장에선 수행된 결과만 확인하면 된다.
만약 SMS 쪽에서 실수가 있었다면, SMS 담당자만 내용을 수정하고, 이메일 담당자는 수정하지 않아도 된다.

 

이것이 곧 팩토리 패턴이다.

 

코드로 한 번 살펴보자.

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

class Latte {
    constructor(){
        this.name = "Latte"
    }
}

class Espresso {
    constructor(){
        this.name = "Espresso"
    }
}

class LatteFactory extends CoffeeFactory {
    static createCoffee(){
        return new Latte()
    }
}

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

const factoryList = { LatteFactory, EspressoFactory }

const main = () => {
    const coffee = CoffeeFactory.createCoffee('LatteFactory')
    console.log(coffee.name)
}

main()
  • CoffeeFactory : 직접 생성하지 않고, 어떤 팩토리를 쓸지만 결정한다.
  • Latte/Espresso : 서로 공통 인터페이스 없이 독립적인 클래스
  • LatteFactory/EspressoFactory : CoffeeFactory를 상속하고, createCoffee()를 오버라이딩

팩토리 패턴

 


2️⃣ 이터레이터 패턴

이터레이터를 사용하여 컨테이너의 요소에 접근하는 디자인 패턴

 

Map, Set, List, Array 등 다양한 자료구조들을

똑같은 인터페이스로 순회할 수 있다.

 

JavaScript에서 순회할 때 사용하는 for...of 가 있다.

(이건 아는 문법이기에 코드 첨부는 PASS)

 

만약 Map 같은 경우, 이터레이터가 없다면,

key가 존재하는지 다 파악해서 값을 찾아야 하는 번거로움이 발생한다.


📝 마무리

두 패턴 모두 호출하는 쪽에서 내부 구조를 모르도록 분리한다는 공통점이 있다.
자주 바뀌는 부분을 추상화해서 캡슐화했기 때문이다!

 

객체 지향 원칙을 따르고 있는 것인데, 아주 중요한 부분같죠?

다들 메모메모!!!