일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 다익스트라 알고리즘
- 토이프로젝트
- 정렬
- EC2
- 탐욕법
- mysql
- url parsing
- 브루트포스
- ELB
- Algorithm
- 동적프로그래밍
- AWS
- nodejs
- 완전탐색
- 자료구조
- 라우터
- java
- sort
- Spring Boot
- EventListener
- react
- 스터디
- 리액트
- 백준알고리즘
- spring
- Router
- 알고리즘
- 서버구축
- 백준
- BFS
- Today
- Total
공부하는 블로그
Design Pattern | Factory Method 본문
Factory Method?
팩토리 메서드(Factory Method)는 객체 생성을 위한 디자인 패턴 중 하나로, 쉽게 말하면 객체 생성을 대신 수행해주는 공장이라 할 수 있다. 팩토리 메서드 패턴을 이용하면 팩토리 클래스에서 간접적으로 객체를 생성 후 반환해준다.
Factory Method 기본 예제코드(JAVA)
이동 수단을 제작하는 공장을 만들어보자.
// Products
interface Transport {
public void ride();
}
class Car implements Transport{
@Override
public void ride() {
System.out.println("뛰뛰빵빵");
}
}
class Bicycle implements Transport{
@Override
public void ride() {
System.out.println("따르릉따르릉");
}
}
Transport라는 인터페이스를 통해 각기 다른 ride() 메소드를 가진 Car와 Bicycle 객체를 생성할 수 있다.
// Factory
public class Factory {
public Transport createTransport(Usage u) {
if(u == Usage.BICYCLE) {
return new Bicycle();
}else if (u == Usage.CAR) {
return new Car();
}
return null;
}
}
Factory 클래스는 createTransport() 메소드를 이용하여 각기 다른 Transport(Bicycle 또는 Car)를 생성할 수 있다.
// 객체를 생성해보자
public class CreateObj {
private Factory factory = new Factory();
Transport tp1;
Transport tp2;
void withoutFactory() {
tp1 = new Bicycle();
tp2 = new Car();
tp1.ride(); // 따르릉따르릉
tp2.ride(); // 뛰뛰빵빵
}
void withFactory() {
tp1 = factory.createTransport(Usage.BICYCLE);
tp2 = factory.createTransport(Usage.CAR);
tp1.ride(); // 따르릉따르릉
tp2.ride(); // 뛰뛰빵빵
}
}
enum Usage {
BICYCLE, CAR
}
withoutFactory()는 직접 인스턴스를 생성해주는 메서드이며 withFactory() 팩토리를 통해 간접적으로 인스턴스를 생성해주는 메서드이다.
위의 예제 코드를 살펴보면 왜 굳이 팩토리 메서드를 사용해야 하는지 의문이 들 것이다. 오히려 팩토리 클래스를 생성해야해서 더 번거로워 보일 수도 있다. 이에 대한 답은 아래에서 설명하도록 하겠다.
Factory Method 장점
만약 셀 수없이 많은 클래스에서 각각 Transport를 직접 생성한다고 생각해보자. 이 때, 생성자의 매개변수를 변경하는 일이 발생한다면 수많은 클래스에 직접 생성된 Transport를 일일히 찾아가 하나하나 뜯어 고쳐야 할 것이다. 여기서 팩토리 메서드가 빛을 발하게 된다.
팩토리 메서드를 사용하여 객체를 생성했다면 하나하나 뜯어 고칠 필요 없이 Factory 클래스 내부의 create 메소드만 간단하게 수정하여 변경사항을 업데이트할 수 있게 된다.
따라서, 팩토리 메서드는 객체 지향 원칙을 잘 지킬 수 있도록 도와준다.
1. 단일 책임 원칙 : Product 생성 코드를 프로그램의 한 위치(Factory)로 이동하여 코드를 더 쉽게 지원할 수 있다.
2. 개방 / 폐쇄의 원칙 : 기존 클라이언트 코드를 손상시키지 않고 새로운 유형의 Product를 프로그램에 도입할 수 있다.
이러한 팩토리 메서드는 추상 팩토리 메서드(Abstract Factory Method)로 확장되어 사용되기도 한다.
Factory Method 문제점
패턴을 구현하기 위해 많은 하위 클래스를 도입해야 하므로 코드가 더 복잡해질 수 있다.
References
- 객체지향 디자인 패턴 : www.youtube.com/watch?v=q3_WXP9pPUQ&list=PLpO7kx5DnyIHrxFpyXKkzUg2F_mr-8yY0&index=3
- Factory Method : refactoring.guru/design-patterns/factory-method
- Java 디자인패턴 - 팩토리 메소드 패턴 : niceman.tistory.com/143
'Others' 카테고리의 다른 글
Others | Book Review : 읽기 좋은 코드가 좋은 코드다 (0) | 2020.10.05 |
---|---|
Design Pattern | Singleton (0) | 2020.09.14 |
Flowchart 작성법 (0) | 2020.09.10 |