10.5 Type Object Pattern (타입 객체 패턴)

2024. 3. 14. 02:45CS - Roadmap.sh/10. Design Patterns

※[https://roadmap.sh/computer-science]를 따라서 공부하고 기록한 글입니다.

cs - 10. Design Patterns - 10.5 Type Object Pattern

 

Type Object Pattern

Type object pattern is a creational design pattern that allows us to create a new object of a type without exposing the object creation logic to the client. It is used when we need to create a new object of a type, but we don’t know which type we need to create until runtime. It is like a factory pattern, but instead of returning a new object of a type, it returns a new object of a type that is already created.


타입 객체 패턴은 클라이언트에게 객체 생성 로직을 노출하지 않고도 한 타입의 새 객체를 생성할 수 있는 생성 디자인 패턴입니다. 타입의 새 객체를 생성해야 하지만 런타임까지 어떤 타입을 생성해야 하는지 모를 때 사용합니다. 팩토리 패턴과 비슷하지만 새로운 유형의 객체를 반환하는 대신 이미 생성된 유형의 새 객체를 반환합니다.

 

 

 

타입 객체 패턴(Type Object Pattern)


타입 객체 패턴은 객체 지향 프로그래밍에서 유연성을 제공하는 디자인 패턴 중 하나입니다. 이 패턴은 클래스의 인스턴스를 생성하는 대신, 객체의 유형을 나타내는 객체를 사용하여 다양한 행동과 속성을 캡슐화합니다. 이 방식은 특히 게임 개발이나 시스템에서 다양한 엔티티 유형을 다뤄야 할 때 유용하게 활용됩니다.

타입 객체 패턴은 "타입"을 일종의 객체로 취급하며, 이를 통해 클래스 계층 구조에 대한 의존도를 줄이고 더 동적인 객체 생성과 관리를 가능하게 합니다. 

 

 

타입 객체 패턴의 구성 요소



1. 타입 객체(Type Object)

각각의 타입 객체는 특정 유형의 특징과 행동을 정의합니다. 예를 들어, 게임 개발에서는 '몬스터', '아이템', '스킬' 등이 각각의 타입 객체가 될 수 있습니다. 이러한 타입 객체는 해당 유형의 모든 인스턴스가 공유하는 속성과 메서드를 정의합니다.

 

2. 타입 객체를 사용하는 객체

이 객체들은 특정 타입 객체의 인스턴스로, 타입 객체에서 정의된 속성과 행동을 상속받아 사용합니다. 이를 통해 개발자는 클래스를 확장하는 대신 타입 객체를 변경하거나 새로운 타입 객체를 추가함으로써 유연하게 시스템을 확장할 수 있습니다.

 

타입 객체 패턴의 장점 & 단점

장점

확장성: 새로운 클래스를 만들지 않고도 새로운 타입을 쉽게 추가할 수 있습니다. 이는 특히 게임 개발 같이 동적으로 많은 엔티티 유형을 관리해야 하는 경우 유용합니다.


유연성: 시스템의 다른 부분을 변경하지 않고도 타입 객체를 수정하거나 추가할 수 있습니다.


중복 감소: 공통 속성과 행동을 타입 객체에 정의함으로써 코드 중복을 줄일 수 있습니다.


단점
복잡성 증가: 타입 객체 패턴을 도입하면 시스템의 구조가 복잡해질 수 있습니다. 특히, 타입 관리와 객체 생성 로직을 이해하고 관리해야 합니다.


성능 이슈: 타입 객체를 너무 많이 사용하면, 객체 생성과 관리에 있어 성능 저하가 발생할 수 있습니다. 특히, 게임 개발과 같이 실시간 성능이 중요한 시스템에서는 주의가 필요합니다.



In python

 

 

자동저장안되고 도중에 날아감 추후 수정

class MonsterType:
    def __init__(self, name, attack, defense):
        self.name = name
        self.attack = attack
        self.defense = defense

 

 

class Monster:
    def __init__(self, monster_type):
        self.monster_type = monster_type
    
    def display_info(self):
        print(f"Name: {self.monster_type.name}, Attack: {self.monster_type.attack}, Defense: {self.monster_type.defense}")

 

728x90