팩토리 패턴
팩토리 패턴
팩토리 패턴(Factory Pattern)은 소프트웨어 디자인 패턴 중 하나로, 객체 생성을 처리하기 위한 패턴입니다. 객체 생성 코드를 클라이언트 코드에서 분리하여 객체 생성의 유연성과 확장성을 높이는데 목적이 있습니다. 이 패턴은 객체 생성과정을 추상화하여 객체의 유형에 따라 적절한 클래스의 인스턴스를 생성하도록
도와줍니다.
객체 생성의 복잡성:
객체 생성이 복잡하거나 생성 과정이 다양한 단계로 이루어져 있는 경우, 팩토리 패턴을 사용하여
클라이언트 코드를 단순화할 수 있습니다.
객체 생성의 변화:
객체 생성 방식이 변경될 수 있는 경우, 클라이언트 코드를 수정하지 않고도 변경된 생성 방식을 적용할 수
있습니다.
클래스 인스턴스화의 추상화:
생성되는 클래스의 인스턴스화를 추상화하여 클라이언트 코드와 객체 생성 코드 간의 결합도를 낮출 수
있습니다
팩토리 패턴 구성 요소
추상 팩토리(Abstract Factory):
객체 생성에 대한 추상적인 인터페이스를 제공합니다. 이 인터페이스는 구체적인 팩토리 클래스들이
구현해야 하는 메서드들을 정의합니다.
구체적인 팩토리(Concrete Factory):
추상 팩토리를 구체적으로 구현한 클래스로, 실제로 객체를 생성하는 역할을 합니다.
각각의 구체적인 팩토리는 특정 유형의 객체를 생성하는 책임을 가집니다.
추상 제품(Abstract Product):
생성되는 객체들의 추상 클래스 또는 인터페이스를 정의합니다.
이는 팩토리 메서드 패턴과 유사하게 추상화된 인터페이스입니다.
구체적인 제품(Concrete Product):
추상 제품을 실제로 구현한 클래스입니다.
구체적인 팩토리에서 이러한 클래스의 인스턴스를 생성하고 반환합니다.
팩토리 패턴을 사용하면 클라이언트 코드는 객체 생성을 위한 구체적인 클래스와 결합되지 않으므로,
새로운 유형의 객체를 추가하거나 객체 생성 방식을 변경할 때 유연하게 대처할 수 있습니다.
이로써 코드의 재사용성과 유지보수성이 향상되는 장점을 얻을 수 있습니다.
팩토리 패턴 특징
팩토리 패턴은 객체 지향 소프트웨어 디자인의 중요한 개념 중 하나로,
객체 생성에 관련된 복잡성을 다루는데 사용됩니다. 이 패턴의 주요 특징은 다음과 같습니다:
객체 생성 분리:
팩토리 패턴은 객체 생성 코드를 클라이언트 코드에서 분리하여 객체 생성 과정과 클라이언트 코드를
분리합니다. 이로써 클라이언트 코드는 객체의 구체적인 클래스를 알 필요 없이 팩토리를 통해 객체를
생성할 수 있습니다.
유연성과 확장성:
새로운 유형의 객체를 추가하거나 객체 생성 방식을 변경할 때 클라이언트 코드를 수정하지 않고도
이를 처리할 수 있습니다.
이는 객체 생성의 변경이 팩토리 클래스 내부로 캡슐화되어 있기 때문에 가능합니다.
코드의 재사용성:
팩토리 패턴을 사용하면 객체 생성 코드가 여러 곳에 중복되지 않으므로 코드의 재사용성이 증가합니다.
객체 생성 로직이 하나의 팩토리 클래스에 집중되기 때문에 코드 중복을 방지할 수 있습니다.
의존성 역전 원칙(Dependency Inversion Principle) 준수:
팩토리 패턴은 클라이언트 코드가 구체적인 클래스에 의존하지 않고 추상화된 인터페이스나 클래스에
의존하도록 돕습니다.
이는 높은 수준의 모듈화와 코드의 유연성을 제공합니다.
단일 지점 수정:
객체 생성 방식이 변경되거나 새로운 객체 유형을 추가할 때, 팩토리 클래스만 수정하면 됩니다.
클라이언트 코드는 변경 없이도 이러한 변화를 반영할 수 있습니다.
복잡한 초기화 처리:
팩토리 패턴을 사용하여 객체 생성 시에 복잡한 초기화 작업을 처리할 수 있습니다.
클라이언트 코드는 단순히 팩토리 메서드를 호출하면 됩니다.
약한 결합(Loose Coupling):
팩토리 패턴은 클라이언트 코드와 객체 생성 코드를 분리함으로써 강한 결합을 피할 수 있습니다.
이는 소프트웨어의 유지보수성과 확장성을 향상시킵니다.
생성 로직 중앙 집중화:
객체 생성과 관련된 복잡한 로직이 팩토리 클래스 내부에 집중되므로,
코드의 가독성과 유지보수성이 향상됩니다.
팩토리 패턴은 다양한 프로그래밍 시나리오에서 유용하게 활용될 수 있으며, 객체 생성 관련 복잡성을
관리하고 코드의 구조를 개선하는 데 도움을 줍니다.
팩토리 패턴 쉽게 알기!
해성이가 다음 학기 체육 시간에 무엇을 할지 고민하고 있습니다.
해성이는 체육 시간에 다양한 운동 활동을 할 수 있는데, 이때 팩토리 패턴을 활용하여 그의 선택을
도와줄 수 있습니다.
추상 팩토리(Abstract Factory):
해성이는 '운동 활동'에 대한 추상적인 개념을 생각하고, 각각의 운동을 구체적으로 어떻게 수행할지를
정의합니다.
구체적인 팩토리(Concrete Factory):
해성이는 '농구'와 '축구'라는 두 가지 운동을 고민하고, 각각의 운동에 맞게 필요한 장비와 규칙을
정의합니다.
이렇게 농구와 축구를 위한 두 개의 구체적인 팩토리를 만듭니다.
추상 제품(Abstract Product):
해성이는 각 운동에 대한 공통된 기능과 속성을 정의합니다. 예를 들어, '운동 활동 시작',
'운동 활동 종료'와 같은 메서드가 이에 해당합니다.
구체적인 제품(Concrete Product):
해성이는 농구와 축구에 대한 구체적인 클래스를 만들어 각각의 운동에 필요한 기능을 구현합니다.
'농구 공', '농구 코트', '축구 공', '축구 경기장' 등이 이에 해당합니다.
해성이가 체육 시간에 어떤 운동을 선택하려면, 다음과 같은 방식으로 팩토리 패턴을 활용할 수 있습니다.
1. 해성이는 체육 시간에 농구를 할지 축구를 할지 결정합니다.
2. 해당 운동에 대한 구체적인 팩토리(농구 팩토리 또는 축구 팩토리)를 선택하여 생성합니다.
3. 선택한 팩토리를 통해 각 운동에 필요한 객체(공, 코트 등)를 생성합니다.
4. 생성된 객체를 사용하여 해당 운동을 즐깁니다.
이처럼 팩토리 패턴을 활용하면 해성이는 언제든지 운동을 바꿀 수 있으며, 새로운 운동을 추가하거나
운동 방식을 변경해도 클라이언트 코드를 수정하지 않아도 됩니다.
이로써 해성이는 체육 시간을 더욱 유연하게 계획하고 즐길 수 있게 됩니다.
*바쁜 사람을 위한 깜찍한 정리
팩토리 패턴은 어떤 것에 대한 추상적인 개념을 잡고 구체적으로 파악을 한 다음 필요 한 변수및 클래스 들을 정의 하여 언제든지 그와 비슷한 것을 이용할때는 값만 추가시켜줘서 유연하고 빠르게 이용 할수 있게 만드는 디자인 기법입니다. 예를 들어 슈퍼마켓이라고 가정을 하였을때 새로운 물건들이 들어와도 값만 추가하면 그 물건을 어느 진열대에 어느 가격에 팔수 있는지를 바로바로 정의 할 수 있게 만드는 것이 팩토리 패턴의 개념이라고 생각하면 쉬울것 같습니다. 새로운 기능을 추가하거나 변경할 때도 클라이언트 코드에 최소한의 영향을 줄 수 있습니다.
'목차훔치기 > 면접을 위한 CS 전공지식 노트' 카테고리의 다른 글
이터레이터 패턴(면접을 위한 CS 전공지식 노트) (0) | 2023.08.12 |
---|---|
프록시 패턴과 프록시 서버(면접을 위한 CS 전공지식 노트) (0) | 2023.08.11 |
옵저버 패턴(면접을 위한 CS 전공지식 노트) (0) | 2023.08.10 |
전략 패턴(면접을 위한 CS 전공지식 노트) (0) | 2023.08.09 |
싱글톤 패턴(면접을 위한 CS 전공지식 노트) (0) | 2023.08.07 |