κ°μ²΄ μμ±μ μΊ‘μνμ μ μ ν©ν°λ¦¬ λ©μλ
κ°μ
κ°μ²΄ μμ± μ μΊ‘μνλ μ΄λ¦μλ μμ±μ λμ μ μ ν©ν°λ¦¬ λ©μλλ₯Ό νμ©νμ¬ μ μ°μ±κ³Ό νμ₯μ±μ μ 곡ν©λλ€. μ΄μ λν μ₯μ κ³Ό λ¨μ , κ·Έλ¦¬κ³ κ΄λ ¨λ μ£Όμ λ€μ λ€λ£¨κ³ μμ΅λλ€. μ΄ λ¬Έμλ Joshua Blochμ "μ΄νν°λΈ μλ° 3ν"μ μ°Έκ³ νμ¬ μμ±λμμ΅λλ€.
μ₯μ
1. μ΄λ¦μ κ°μ§ μ μλ€.
μ μ ν©ν°λ¦¬ λ©μλλ μ΄λ¦μ κ°μ§κΈ° λλ¬Έμ λ°νλ κ°μ²΄μ νΉμ±μ μ½κ² μ μ μμ΅λλ€. μ΄λ κ°λ μ±κ³Ό μ μ§λ³΄μμ λμμ΄ λ©λλ€.
class Company {
private Company() {}
// μ΄λ¦μ ν΅ν κ°λ
μ± ν₯μ
public static Company createNewTeam() {
// κ°μ²΄ μμ± λ‘μ§
}
}
2. νΈμΆλ λλ§λ€ μΈμ€ν΄μ€λ₯Ό μλ‘ μμ±νμ§ μμλ λλ€.
미리 λ§λ€μ΄λκ±°λ μΊμ±μ ν΅ν΄ λΆνμν κ°μ²΄ μμ±μ νΌν μ μμ΅λλ€. μ±κΈν€ ν¨ν΄μ΄λ νλΌμ΄μ¨μ΄νΈ ν¨ν΄κ³Ό κ°μ ν¨ν΄μμ νμ©λ©λλ€.
class Company {
private static Company company;
private Company() {}
// κΈ°μ‘΄ μΈμ€ν΄μ€ νμ©
public static Company createNewTeam() {
if(company == null) {
company = new Company();
} else {
return company;
}
}
}
3. λ°ν νμ μ νμ νμ κ°μ²΄λ₯Ό λ°νν μ μλ λ₯λ ₯μ΄ μλ€.
κ°μ²΄λ₯Ό ꡬν ν΄λμ€ μμ΄ μΈν°νμ΄μ€λ§μΌλ‘ λ€λ£° μ μμΌλ©°, μ΄λ μλ° 8 μ΄νμ κΈ°λ₯μ νμ©ν μ μλ μ₯μ μ΄ μμ΅λλ€.
4. λ€λ₯Έ κ°μ²΄λ₯Ό λ°νν μ μλ€.
μ λ ₯ 맀κ°λ³μμ λ°λΌ λ§€λ² λ€λ₯Έ ν΄λμ€μ κ°μ²΄λ₯Ό λ°νν μ μμ΄ κ°μ²΄ μ νμ μμ΄μ μ μ°μ±μ μ 곡ν©λλ€.
5. μ μ ν©ν°λ¦¬ λ©μλλ₯Ό μμ±νλ μμ μλ λ°νν κ°μ²΄μ ν΄λμ€κ° μ‘΄μ¬νμ§ μμλ λλ€.
λ¨μ
1. μμμ νλ €λ©΄ publicμ΄λ protected μμ±μκ° νμνλ€.
μ μ ν©ν 리 λ©μλλ§ μ 곡νλ©΄ νμ ν΄λμ€λ₯Ό λ§λ€ μ μμ΅λλ€. μ΄λ μμ보λ€λ μ»΄ν¬μ§μ μ μ λνκ³ λΆλ³ νμ μΌλ‘ λ§λ€λ €λ©΄ μ€νλ € μ₯μ μ΄ λ μ μμ΅λλ€.
λΆλ‘
λ©μλ μκ·Έλμ²λ?
λ©μλ μκ·Έλμ²λ λ©μλ μ΄λ¦κ³Ό μ λ ₯ 맀κ°λ³μμ μμ, νμ , κ°μλ‘ μ΄λ€μ§ κ²μ λ§ν©λλ€. λ¨, λ°ν κ°μ νμ μ μκ·Έλμ²μ ν¬ν¨λμ§ μμ΅λλ€.
μ±κΈν€κ³Ό νλΌμ΄μ¨μ΄νΈ ν¨ν΄μ μ°¨μ΄μ μ?
μ±κΈν€μ μ€μ§ νλμ κ°μ²΄κ° μ‘΄μ¬ν΄μΌ νλ κ²½μ°μ κ°μ²΄ μμ±μ μ νμ λμ΄μΌ ν κ²½μ° μ¬μ©λ©λλ€. λ°λ©΄, νλΌμ΄μ¨μ΄νΈλ μ€λ³΅λλ λ°μ΄ν°κ° μλ€λ©΄ κ°μ²΄λ₯Ό 곡μ νμ¬ λ©λͺ¨λ¦¬μ μΈμ€ν΄μ€ μμ± μκ°μ μ μ½ν©λλ€.
μ€μ μ¬μ© μμ
1. μ±κΈν€ ν¨ν΄
μ±κΈν€ ν¨ν΄μ ν ν΄λμ€μμ νλμ μΈμ€ν΄μ€λ§ μμ±νκ³ , κ·Έ μΈμ€ν΄μ€μ μ κ·Όν μ μλ μ μμ μΈ μ κ·Όμ μ μ 곡ν©λλ€.
class SingletonExample {
private static SingletonExample instance;
private SingletonExample() {}
public static SingletonExample getInstance() {
if(instance == null) {
instance = new SingletonExample();
}
return instance;
}
}
2. νλΌμ΄μ¨μ΄νΈ ν¨ν΄
νλΌμ΄μ¨μ΄νΈ ν¨ν΄μ κ°μ²΄λ₯Ό μμ±νλ λΉμ©μ΄ ν° κ²½μ°, λμΌν κ°μ²΄λ₯Ό 곡μ νμ¬ λ©λͺ¨λ¦¬λ₯Ό μ μ½ν©λλ€.
import java.util.HashMap;
import java.util.Map;
interface Flyweight {
void operation();
}
class ConcreteFlyweight implements Flyweight {
@Override
public void operation() {
// λ
립λ κ°μ²΄μ λμ
}
}
class FlyweightFactory {
private static final Map<String, Flyweight> flyweights = new HashMap<>();
public static Flyweight getFlyweight(String key) {
return flyweights.computeIfAbsent(key, k -> new ConcreteFlyweight());
}
}
μ°Έκ³
λμ: "μ΄νν°λΈ μλ° 3ν" - Joshua Bloch
'IT' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λ°μ΄ν° ꡬ쑰] λ°μ΄ν° ꡬ쑰 (0) | 2022.11.03 |
---|---|
Blocking-NonBlocking-Sync-Async (0) | 2022.11.03 |
[JAVA] How to install openJDK 8 on Mac (0) | 2022.11.03 |
[λ°μ΄ν° ꡬ쑰] μ°κ²° 리μ€νΈ(Linked lists) (0) | 2022.11.03 |
[DATABASE] νΈλμμ μ 격리 μμ€μ΄λ? (0) | 2022.11.03 |
λκΈ