본문 바로가기

CS/디자인패턴

팩토리 패턴 - 생성(by GoF)

정의 : 객체를 사용하는 코드에서 객체 생성 부분을 떼어내 추상화한 패턴이자 상속 관계에 있는 두 클래스에서 상위 클래스가 중요한 뼈대를 결정하고, 하위 클래스에서 객체 생성에 관한 구체적인 내용을 결정하는 패턴이다.

 

 

팩토리 패턴 예시

위와 같이 Coffee로 상위 클래스가 중요한 뼈대를 구성하고, 하위 클래스에서 구체적인 내용을 결정하는 예시 코드이다.

 

장점

- 내부적으로 인스턴스를 만드는 코드를 수정하지 않고 새로운 인스턴스를 다양한 방법으로 확장할 수 있음

  → Java 자체의 장점인 추상화랑 맞물리는 건가.. 추상화, 다형성이라고 생각하면 되나?

- 코드가 일관성있고 간결해진다.

단점

- 클래스가 많아진다. 또한 클래스 계층도 커질 수 있다.

 → 단점이라고는 하나 일일이 새로 설계하는 것보다 클래스가 과연 적어질까?..

 → 계층이 커지긴 하겠지만 중구난방으로 클래스가 흩어져있는 것보다는 나은 점이 아닌가?..

 

※ Enum : 

 

상수의 집합을 정의할 때 사용되는 타입이다. 메서드를 집어넣어 관리할 수도 있다.
Enum을 기반으로 상수 집합을 관리한다며 코드를 리팩터링할 때 상수 집합에 대한 로직 수정 시 이 부분만 수정하면 된다는 장점이 있다.  본질적으로 스레드세이프(thread safe)하기 때문에 싱글톤 패턴을 만들 때 도움이 된다.
 → 스레드세이프 (Thread Safe)란 멀티 스레드 프로그래밍에서 일반적으로 어떤 함수나 변수, 혹은 객체가
여러 스레드로부터 동시에 접근이 이루어져도 프로그램의 실행에 문제가 없음을 뜻한다.
하나의 함수가 한 스레드로부터 호출되어 실행 중일 때, 다른 스레드가 그 함수를 호출하여 동시에 실행되더라도 각 스레드에서의 함수의 수행 결과가 올바르게 나오는 것으로 정의한다.

 

 

'CS > 디자인패턴' 카테고리의 다른 글

옵저버 패턴 - 행위(by GoF)  (0) 2024.06.08
전략 패턴 - 행위(by GoF)  (0) 2024.06.08
싱글톤 패턴 - 생성(by GoF)  (0) 2024.06.07
디자인 패턴의 정의와 종류  (0) 2024.06.07
라이브러리 vs 프레임워크  (0) 2024.06.07