Singleton Pattern - dnwls16071/Backend_Summary GitHub Wiki
π Singleton Pattern μ€λͺ
- ν΄λΉ ν¨ν΄μ νλ‘κ·Έλ¨μμ νΉμ ν΄λμ€ κ°μ²΄κ° λ¨ νλλ§ μ‘΄μ¬ν΄μΌ ν λ νμνλ€.
- μΈμ€ν΄μ€ μμ(instance)λ€μ μλ‘μ΄ μΈμ€ν΄μ€ μ¦, κ°μ²΄κ° μμ±λ λλ§λ€ ν¨κ» μμ±λμ΄ JVMμ ν μμμ μ리μ‘κ²λλ€.
- λ°λ©΄ μ€νν± μμ(static)λ€μ κ°μ²΄ κ°μμ μκ΄μμ΄ λ± 1κ°κ° μ‘΄μ¬νλλ° JVMμ ν΄λμ€ μμμ μ리μ‘κ²λλ€.
[Ex1]
public class Theme {
private static Theme instance; // ν
λ§κ° μ¬λ¬ μΈμ€ν΄μ€λ₯Ό κ°μ§λ€λ©΄ μνκ° λ€μ£½λ°μ£½ μμΌ κ²μ΄λ€.
private String themeColor;
private Theme() { // μμ±μλ₯Ό privateλ‘ μ μΈν΄ μΈλΆμμ νΈμΆν μ μλλ‘ λ°©μ§νλ€.
this.themeColor = "light"; // Default theme
}
public static Theme getInstance() {
if (instance == null) {
instance = new Theme();
}
return instance;
}
public String getThemeColor() {
return themeColor;
}
public void setThemeColor(String themeColor) {
this.themeColor = themeColor;
}
}
public class Button {
private String label;
public Button(String label) {
this.label = label;
}
public void display() {
String themeColor = Theme.getInstance().getThemeColor(); // μ±κΈν€μ΄κΈ° λλ¬Έμ κ°μ²΄κ° λ¨ νλλ§ μ‘΄μ¬
System.out.println(
"Button [" + label + "] displayed in " + themeColor + " theme."
);
}
}
public class TextField {
private String text;
public TextField(String text) {
this.text = text;
}
public void display() {
String themeColor = Theme.getInstance().getThemeColor();
System.out.println(
"TextField [" + text + "] displayed in " + themeColor + " theme."
);
}
}
public class Label {
private String text;
public Label(String text) {
this.text = text;
}
public void display() {
String themeColor = Theme.getInstance().getThemeColor();
System.out.println(
"Label [" + text + "] displayed in " + themeColor + " theme."
);
}
}
βμ±κΈν€ ν¨ν΄μ ν μ€νΈκ° μ΄λ ΅λ€.
μ±κΈν€μ ν μμμμ μ¬λ¬ κ°μ²΄λ‘ μ‘΄μ¬νλ κ²μ΄ μλλΌ ν΄λμ€ μμμμ νλμ κ°μ²΄λ§μΌλ‘ μ‘΄μ¬νλ€. κ·Έλ κΈ° λλ¬Έμ ν΄λμ€ λ΄μ μ μ μΈμ€ν΄μ€λ₯Ό μ μ§νλ―λ‘ ν μ€νΈ κ° μνκ° κ³΅μ λ μ°λ €κ° μλ€. κ·Έλ κ² λλ€λ©΄ λ€μ ν μ€νΈμ μν₯μ μ€ μ μμ΄ λ 립μ μΈ ν μ€νΈ μμ±μ΄ μ΄λ €μμ§λ€.