[java] 자바 디자인 패턴(Design patterns in Java)
디자인 패턴은 소프트웨어 개발에서 자주 발생하는 문제를 해결하고, 유지보수 가능하고 확장 가능한 코드를 작성하는 방법을 제공합니다. 이는 개발자들 간의 공통된 언어와 개발 방법을 가지고 작업할 수 있게 해줍니다. 이 글에서는 자바 언어로 구현된 몇 가지 디자인 패턴에 대해 안내하겠습니다.
1. 싱글톤 패턴 (Singleton pattern)
싱글톤 패턴은 애플리케이션 전체에서 단일 인스턴스를 유지하고 접근하는 패턴입니다. 이 패턴을 사용하면 여러 개의 인스턴스가 생성되지 않고 오직 한 개의 인스턴스만 사용되게 됩니다.
public class Singleton {
private static Singleton instance;
private Singleton() {
// private 생성자
}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
2. 전략 패턴 (Strategy pattern)
전략 패턴은 다양한 알고리즘을 객체화하여 동적으로 교체할 수 있는 패턴입니다. 이 패턴을 사용하면 알고리즘을 별도의 클래스로 분리하여, 실행 중에 알고리즘을 변경할 수 있습니다.
public interface Strategy {
void execute();
}
public class StrategyA implements Strategy {
@Override
public void execute() {
System.out.println("전략 A 실행");
}
}
public class StrategyB implements Strategy {
@Override
public void execute() {
System.out.println("전략 B 실행");
}
}
public class Context {
private Strategy strategy;
public Context(Strategy strategy) {
this.strategy = strategy;
}
public void executeStrategy() {
strategy.execute();
}
}
3. 팩토리 메서드 패턴 (Factory method pattern)
팩토리 메서드 패턴은 객체 생성을 서브 클래스에 위임하여 객체를 생성하는 패턴입니다. 이 패턴을 사용하면 객체 생성을 추상화하여 서브 클래스에서 구체적인 객체 생성을 담당합니다.
public abstract class Product {
public abstract void use();
}
public class ConcreteProductA extends Product {
@Override
public void use() {
System.out.println("Product A 사용");
}
}
public class ConcreteProductB extends Product {
@Override
public void use() {
System.out.println("Product B 사용");
}
}
public abstract class Creator {
public void someOperation() {
Product product = createProduct();
product.use();
}
protected abstract Product createProduct();
}
public class ConcreteCreatorA extends Creator {
@Override
protected Product createProduct() {
return new ConcreteProductA();
}
}
public class ConcreteCreatorB extends Creator {
@Override
protected Product createProduct() {
return new ConcreteProductB();
}
}
결론
디자인 패턴은 소프트웨어 개발에서 자주 발생하는 문제를 해결하는 데 도움을 주는 중요한 도구입니다. 자바 언어로 구현된 몇 가지 디자인 패턴에 대해 살펴보았습니다. 이러한 패턴을 잘 활용하면 좀 더 유지보수 가능하고 확장 가능한 코드를 작성할 수 있습니다. 디자인 패턴에 대한 이해는 개발자들 간의 공통된 언어와 개발 방법을 형성하는 데 도움이 될 것입니다.