본문 바로가기
디자인패턴과 코딩컨벤션

[디자인패턴] Week 26: 파이썬 디자인 패턴 I - 개요와 생성 패턴

by cogito21_python 2024. 6. 2.
반응형

Day 1: 디자인 패턴 개요

  • 강의 내용:
    • 디자인 패턴의 개념
      • 디자인 패턴이란 무엇인가?
      • 디자인 패턴의 중요성
    • 디자인 패턴의 종류
      • 생성 패턴 (Creational Patterns)
      • 구조 패턴 (Structural Patterns)
      • 행동 패턴 (Behavioral Patterns)
    • 디자인 패턴의 주요 요소
      • 패턴 이름
      • 문제 및 해결 방법
      • 결과 및 응용 사례
  • 실습:
    • 간단한 디자인 패턴 예제
# Singleton 패턴 예제
class Singleton:
    _instance = None

    def __new__(cls):
        if cls._instance is None:
            cls._instance = super(Singleton, cls).__new__(cls)
        return cls._instance

singleton1 = Singleton()
singleton2 = Singleton()
print(singleton1 is singleton2)  # True

 

Day 2: 생성 패턴 개요

  • 강의 내용:
    • 생성 패턴의 개념
      • 객체 생성의 유연성을 제공하는 패턴
    • 주요 생성 패턴
      • 싱글턴 (Singleton)
      • 팩토리 메서드 (Factory Method)
      • 추상 팩토리 (Abstract Factory)
      • 빌더 (Builder)
      • 프로토타입 (Prototype)
    • 생성 패턴의 응용 사례
      • 리소스 관리, 객체 생성 제어, 복잡한 객체 생성
  • 실습:
    • 간단한 생성 패턴 예제
# Factory Method 패턴 예제
class Product:
    def operation(self):
        pass

class ConcreteProductA(Product):
    def operation(self):
        return "ConcreteProductA"

class ConcreteProductB(Product):
    def operation(self):
        return "ConcreteProductB"

class Creator:
    def factory_method(self):
        pass

    def some_operation(self):
        product = self.factory_method()
        return f"Creator: The same creator's code has just worked with {product.operation()}"

class ConcreteCreatorA(Creator):
    def factory_method(self):
        return ConcreteProductA()

class ConcreteCreatorB(Creator):
    def factory_method(self):
        return ConcreteProductB()

creator_a = ConcreteCreatorA()
print(creator_a.some_operation())  # ConcreteProductA

creator_b = ConcreteCreatorB()
print(creator_b.some_operation())  # ConcreteProductB

 

Day 3: 싱글턴 패턴 (Singleton Pattern)

  • 강의 내용:
    • 싱글턴 패턴의 개념
      • 싱글턴 패턴이란 무엇인가?
      • 하나의 인스턴스만 생성되는 패턴
    • 싱글턴 패턴의 구현 방법
      • new 메서드를 사용한 구현
      • 데코레이터를 사용한 구현
    • 싱글턴 패턴의 응용 사례
      • 로그 기록기, 데이터베이스 연결
  • 실습:
    • 파이썬을 사용한 싱글턴 패턴 구현 예제
# 싱글턴 패턴 - __new__ 메서드 사용
class Singleton:
    _instance = None

    def __new__(cls):
        if cls._instance is None:
            cls._instance = super(Singleton, cls).__new__(cls)
        return cls._instance

singleton1 = Singleton()
singleton2 = Singleton()
print(singleton1 is singleton2)  # True

# 싱글턴 패턴 - 데코레이터 사용
def singleton(cls):
    instances = {}
    def get_instance(*args, **kwargs):
        if cls not in instances:
            instances[cls] = cls(*args, **kwargs)
        return instances[cls]
    return get_instance

@singleton
class Singleton:
    pass

singleton1 = Singleton()
singleton2 = Singleton()
print(singleton1 is singleton2)  # True

 

Day 4: 팩토리 메서드 패턴 (Factory Method Pattern)

  • 강의 내용:
    • 팩토리 메서드 패턴의 개념
      • 팩토리 메서드 패턴이란 무엇인가?
      • 객체 생성의 책임을 서브클래스에 위임하는 패턴
    • 팩토리 메서드 패턴의 구현 방법
      • 클래스 상속과 팩토리 메서드 사용
    • 팩토리 메서드 패턴의 응용 사례
      • 객체 생성의 유연성 제공, 객체 생성의 캡슐화
  • 실습:
    • 파이썬을 사용한 팩토리 메서드 패턴 구현 예제
# Factory Method 패턴 예제
class Product:
    def operation(self):
        pass

class ConcreteProductA(Product):
    def operation(self):
        return "ConcreteProductA"

class ConcreteProductB(Product):
    def operation(self):
        return "ConcreteProductB"

class Creator:
    def factory_method(self):
        pass

    def some_operation(self):
        product = self.factory_method()
        return f"Creator: The same creator's code has just worked with {product.operation()}"

class ConcreteCreatorA(Creator):
    def factory_method(self):
        return ConcreteProductA()

class ConcreteCreatorB(Creator):
    def factory_method(self):
        return ConcreteProductB()

creator_a = ConcreteCreatorA()
print(creator_a.some_operation())  # ConcreteProductA

creator_b = ConcreteCreatorB()
print(creator_b.some_operation())  # ConcreteProductB

 

Day 5: 추상 팩토리 패턴 (Abstract Factory Pattern)

  • 강의 내용:
    • 추상 팩토리 패턴의 개념
      • 추상 팩토리 패턴이란 무엇인가?
      • 관련 객체 군을 생성하기 위한 인터페이스 제공
    • 추상 팩토리 패턴의 구현 방법
      • 추상 팩토리와 구체 팩토리 사용
    • 추상 팩토리 패턴의 응용 사례
      • 복잡한 객체 군 생성, 제품 계열에 독립적인 객체 생성
  • 실습:
    • 파이썬을 사용한 추상 팩토리 패턴 구현 예제
# Abstract Factory 패턴 예제
class AbstractFactory:
    def create_product_a(self):
        pass

    def create_product_b(self):
        pass

class ConcreteFactory1(AbstractFactory):
    def create_product_a(self):
        return ConcreteProductA1()

    def create_product_b(self):
        return ConcreteProductB1()

class ConcreteFactory2(AbstractFactory):
    def create_product_a(self):
        return ConcreteProductA2()

    def create_product_b(self):
        return ConcreteProductB2()

class AbstractProductA:
    def operation_a(self):
        pass

class ConcreteProductA1(AbstractProductA):
    def operation_a(self):
        return "ConcreteProductA1"

class ConcreteProductA2(AbstractProductA):
    def operation_a(self):
        return "ConcreteProductA2"

class AbstractProductB:
    def operation_b(self):
        pass

class ConcreteProductB1(AbstractProductB):
    def operation_b(self):
        return "ConcreteProductB1"

class ConcreteProductB2(AbstractProductB):
    def operation_b(self):
        return "ConcreteProductB2"

factory1 = ConcreteFactory1()
product_a1 = factory1.create_product_a()
product_b1 = factory1.create_product_b()
print(product_a1.operation_a())  # ConcreteProductA1
print(product_b1.operation_b())  # ConcreteProductB1

factory2 = ConcreteFactory2()
product_a2 = factory2.create_product_a()
product_b2 = factory2.create_product_b()
print(product_a2.operation_a())  # ConcreteProductA2
print(product_b2.operation_b())  # ConcreteProductB2

 

Day 6: 생성 패턴 종합 연습

  • 강의 내용:
    • 종합 연습 문제 풀이
      • 싱글턴 패턴, 팩토리 메서드 패턴, 추상 팩토리 패턴 문제 해결
    • 생성 패턴의 응용
      • 다양한 실생활 문제에서의 응용 사례
  • 실습:
    • 종합 연습 문제 해결 및 결과 분석
### 종합 연습 문제 예시
1. 싱글턴 패턴을 사용하여 로그 기록기를 구현하세요.
2. 팩토리 메서드 패턴을 사용하여 다양한 형태의 도형 객체를 생성하세요.
3. 추상 팩토리 패턴을 사용하여 GUI 구성 요소를 생성하세요.

 

이 강의는 파이썬의 디자인 패턴, 특히 생성 패턴의 기본 개념과 구현을 익히는 것을 목표로 하며, 각 강의는 이론과 실습을 포함합니다. 다음 주차에 대한 상세 강의를 원하시면 말씀해 주세요!

 

 

반응형