
소프트웨어 개발에서 디자인 패턴은 단순히 이론이 아니라 실무에서 문제를 해결하는 실사례들이 많습니다. 이 글에서는 싱글턴(Singleton), 팩토리 메소드(Factory Method), 추상 팩토리(Abstract Factory) 패턴을 실제 애플리케이션에서 어떻게 활용할 수 있는지, 그리고 각각의 장단점과 유의점을 살펴보겠습니다.
@Bean과 @Configuration으로 싱글턴 객체를 생성하고 관리합니다.@Injectable() 데코레이터를 사용한 서비스 클래스는 기본적으로 싱글턴으로 관리됩니다.public class Singleton {
private static Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
FactoryBean을 사용해 복잡한 객체 생성 로직을 캡슐화합니다.abstract class Product {
public abstract void use();
}
class ConcreteProductA extends Product {
@Override
public void use() {
System.out.println("Using Product A");
}
}
class ConcreteProductB extends Product {
@Override
public void use() {
System.out.println("Using Product B");
}
}
abstract class Creator {
public abstract Product factoryMethod();
}
class ConcreteCreatorA extends Creator {
@Override
public Product factoryMethod() {
return new ConcreteProductA();
}
}
// 사용
Creator creator = new ConcreteCreatorA();
Product product = creator.factoryMethod();
product.use();
AbstractApplicationContext는 다양한 환경(Context)에서 동작하는 객체군을 생성합니다.interface Button {
void render();
}
interface Checkbox {
void render();
}
class WindowsButton implements Button {
@Override
public void render() {
System.out.println("Rendering Windows Button");
}
}
class MacOSButton implements Button {
@Override
public void render() {
System.out.println("Rendering MacOS Button");
}
}
interface GUIFactory {
Button createButton();
Checkbox createCheckbox();
}
class WindowsFactory implements GUIFactory {
@Override
public Button createButton() {
return new WindowsButton();
}
@Override
public Checkbox createCheckbox() {
return new WindowsCheckbox();
}
}
// 사용
GUIFactory factory = new WindowsFactory();
Button button = factory.createButton();
button.render();