팩토리(Factory) 패턴으로 유연한 객체 생성하기
Design Pattern
객체 지향 프로그래밍에서 new 키워드를 직접 사용하는 것은 꽤나 위험한 일입니다. 구체적인 클래스에 의존하게 만들기 때문이죠. 팩토리 패턴은 "객체를 생성하는 공장"을 따로 두어, 객체 생성의 책임을 분리하고 결합도(Coupling)를 낮추는 기법입니다.
1. 팩토리 메서드 패턴 (Factory Method Pattern)
부모 클래스에서는 객체 생성의 인터페이스만 정의하고, 실제 생성은 자식 클래스가 담당합니다. "피자 가게(Factory)"라는 추상 클래스가 있고, 이를 상속받은 "도미노피자", "피자헛" 클래스가 각각 자신만의 스타일로 "피자" 객체를 만들어내는 식입니다. 확장에 열려있고 변경에 닫혀있는 **OCP(Open-Closed Principle)**를 만족합니다.
2. 추상 팩토리 패턴 (Abstract Factory Pattern)
관련된 객체들의 집합(Family)을 생성하는 인터페이스를 제공합니다.
예를 들어 UI 테마를 만든다고 칩시다. "다크 모드 팩토리"는 다크 버튼, 다크 텍스트 상자를 만들고, "라이트 모드 팩토리"는 라이트 버튼, 라이트 텍스트 상자를 만듭니다. 클라이언트는 구체적인 팩토리가 뭔지 몰라도 createButton()만 호출하면 일관된 테마의 객체를 얻을 수 있습니다.
3. 왜 쓸까?
- 코드 수정 최소화: 새로운 클래스가 추가되어도 (
iPhone16이 나와도) 클라이언트 코드를 수정할 필요 없이 팩토리만 수정하면 됩니다. - 캡슐화: 객체 생성 과정이 복잡할 때(초기 설정 등), 이를 팩토리 안에 숨길 수 있습니다. 사용자에게는 깔끔한 부품만 건네주는 것이죠.
물론, 단순히 new를 쓰는 게 훨씬 간단한 상황에서 팩토리 패턴을 남발하면 클래스만 많아지고 복잡해질 수 있습니다. 유연성이 진정 필요할 때 도입하세요.