디자인 패턴 중 객체 생성 방법이 들어간 생성 패턴
의 대표적인 예시인 싱글톤 패턴과 팩토리 패턴에 대해 알아보자 😀
하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴
public class DatabaseConnection {
private static DatabaseConnection instance;
private String url;
private DatabaseConnection(String url) {
this.url = url;
}
public static DatabaseConnection getInstance(String url) {
if (instance == null) {
instance = new DatabaseConnection(url);
}
return instance;
}
public String connect() {
return this.url;
}
public static void main(String[] args) {
String URL = "mongodb://localhost:27017/startapp";
DatabaseConnection a = DatabaseConnection.getInstance(URL);
DatabaseConnection b = DatabaseConnection.getInstance(URL);
System.out.println(a == b); // true
}
}
ex) LazyHolder 방식
class Singleton {
private static class singleInstanceHolder {
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return singleInstanceHolder.INSTANCE;
}
}
public class HelloWorld{
public static void main(String []args){
Singleton a = Singleton.getInstance();
Singleton b = Singleton.getInstance();
if (a == b){
System.out.println(true); // 출력됨
}
}
}
상속 관계에 있는 두 클래스에서 상위 클래스가 중요한 뼈대를 결정하고, 하위 클래스에서 객체 생성에 대한 구체적인 내용을 결정하는 패턴
ex) 바리스타 공장 (커피 팩토리)
public enum CoffeeType {
LATTE,
ESPRESSO
}
abstract class Coffee {
protected String name;
public String getName() {
return name;
}
}
class Latte extends Coffee {
public Latte() {
name = "latte";
}
}
class Espresso extends Coffee {
public Espresso() {
name = "Espresso";
}
}
class CoffeeFactory {
public static Coffee createCoffee(CoffeeType type) {
switch (type) {
case LATTE:
return new Latte();
case ESPRESSO:
return new Espresso();
default:
throw new IllegalArgumentException("Invalid coffee type: " + type);
}
}
}
public class Main {
public static void main(String[] args) {
Coffee coffee = CoffeeFactory.createCoffee(CoffeeType.LATTE);
System.out.println(coffee.getName());
}
}