π‘ μΌμ’ μ μ€κ³ κΈ°λ²μ΄λ©°, μ€κ³ λ°©λ²μ΄λ€.
λμμΈ ν¨ν΄
κ° λͺ¨λμ μΈλΆνλ μν μ΄λ λͺ¨λλ€ κ°μ μΈν°νμ΄μ€μ κ°μ μ½λλ₯Ό μμ±νλ μμ€μ μΈλΆμ μΈ κ΅¬ν λ°©μμ μ€κ³ν λ μ°Έμ‘°ν μ μλ μ νμ μΈ ν΄κ²° λ°©μ λλ μμ
GoF(Gang of Four) λμμΈ ν¨ν΄ : μ νμ λ°λΌ μμ± ν¨ν΄ 5κ°, ꡬ쑰 ν¨ν΄ 7κ°, νμ ν¨ν΄ 11κ° μ΄ 23κ°μ ν¨ν΄μΌλ‘ ꡬμ±λλ€.
λͺ©μ
- SW μ¬μ¬μ©μ±, νΈνμ±, μ μ§ λ³΄μμ±μ 보μ₯
νΉμ§
- λμμΈ ν¨ν΄μ μμ΄λμ΄μ, νΉμ ν ꡬνμ΄ μλ
- λ¬Έμ ν΄κ²° μλ°©
μ₯μ
- ꡬ쑰 νμ μ©μ΄
- μ¬μ¬μ©μ ν΅ν΄ κ°λ° μκ°κ³Ό λΉμ©μ΄ μ μ½λ¨
- μνν μμ¬μν΅ κ°λ₯
- μ€κ³ λ³κ²½ μμ²μ λν μ μ°ν λμ²
λ¨μ
- κ°μ²΄μ§ν₯μ κΈ°λ°μΌλ‘ ν μ€κ³μ ꡬνμ λ€λ£¨λ―λ‘ μ ν리μΌμ΄μ κ°λ°μλ μ ν©νμ§ μμ
- μ΄κΈ° ν¬μ λΉμ© λΆλ΄
[μμ± ν¨ν΄(Creational Pattern)]
κ°μ²΄μ μμ±κ³Ό κ΄λ ¨λ ν¨ν΄μΌλ‘, κ°μ²΄μ μμ±κ³Ό μ°Έμ‘° κ³Όμ μ μΊ‘μννμ¬ κ°μ²΄κ° μμ±λκ±°λ λ³κ²½λμ΄λ νλ‘κ·Έλ¨μ ꡬ쑰μ μν₯μ ν¬κ² λ°μ§ μλλ‘ νμ¬ νλ‘κ·Έλ¨μ μ μ°μ±μ λμ¬ μ€λ€.
ex) DBConnectionμ κ΄λ¦¬νλ Instanceλ₯Ό νλλ§ λ§λ€ μ μλλ‘ μ ννμ¬, λΆνμν μ°κ²°μ λ§μ
- Abstract Factory(μΆμ ν©ν 리)
- Builder(λΉλ)
- Factory Method(ν©ν 리 λ©μλ)
- Prototype(νλ‘ν νμ )
- Singleton(μ±κΈν€)
- μ ν리μΌμ΄μ μ΄ μμλ λ, μ΄λ€ ν΄λμ€κ° μ΅μ΄ ν λ²λ§ λ©λͺ¨λ¦¬λ₯Ό ν λΉνκ³ ν΄λΉ λ©λͺ¨λ¦¬μ μΈμ€ν΄μ€λ₯Ό λ§λ€μ΄ μ¬μ©νλ ν¨ν΄
- π‘ μΈμ€ν΄μ€κ° νμν λ, λκ°μ μΈμ€ν΄μ€λ₯Ό λ§λ€μ§ μκ³ κΈ°μ‘΄μ μΈμ€ν΄μ€λ₯Ό νμ©νλ κ²
- μμ±μκ° μ¬λ¬λ² νΈμΆλλ, μ€μ λ‘ μμ±λλ κ°μ²΄λ νλμ΄λ©° μ΅μ΄λ‘ μμ±λ μ΄νμ νΈμΆλ μμ±μλ μ΄λ―Έ μμ±ν κ°μ²΄λ₯Ό λ°νμν€λλ‘ λ§λλ κ²
- (javaμμλ μμ±μλ₯Ό privateμΌλ‘ μ μΈν΄ λ€λ₯Έ κ³³μμ μμ±νμ§ λͺ»νλλ‘ λ§λ€κ³ , getInstance() λ©μλλ₯Ό ν΅ν΄ λ°μμ μ¬μ©νλλ‘ κ΅¬ν
μ₯μ
- λ¨Όμ , κ°μ²΄λ₯Ό μμ±ν λλ§λ€ λ©λͺ¨λ¦¬ μμμ ν λΉλ°μμΌ νλ€. νμ§λ§ νλ²μ newλ₯Ό ν΅ν΄ κ°μ²΄λ₯Ό μμ±νλ€λ©΄ λ©λͺ¨λ¦¬ λλΉλ₯Ό λ°©μ§ν μ μμ
[ꡬ쑰 ν¨ν΄(Structural Pattern)]
ν΄λμ€λ κ°μ²΄λ€μ μ‘°ν©νμ¬ λ ν° κ΅¬μ‘°λ‘ λ§λ€ μ μκ² ν΄μ£Όλ ν¨ν΄
ex) 2κ°μ μΈν°νμ΄μ€κ° μλ‘ νΈνμ΄ λμ§ μμ λ, λμ μ°κ²°ν΄μ£ΌκΈ° μν΄μ μλ‘μ΄ ν΄λμ€λ₯Ό λ§λ€μ΄μ μ°κ²° μν¬ μ μλλ‘ ν¨
- Adapter(μ΄λν°)ν΄λμ€λ₯Ό λ°λ‘ μ¬μ©ν μ μλ κ²½μ°κ° μμ (λ€λ₯Έ κ³³μμ κ°λ°νλ€κ±°λ, μμ ν μ μμ λ) μ€κ°μμ λ³ν μν μ ν΄μ£Όλ ν΄λμ€κ° νμ → μ΄λν° ν¨ν΄
- μ¬μ© λ°©λ² : μμ
- νΈνλμ§ μμ μΈν°νμ΄μ€λ₯Ό μ¬μ©νλ ν΄λΌμ΄μΈνΈ κ·Έλλ‘ νμ© κ°λ₯
- ν₯ν μΈν°νμ΄μ€κ° λ°λλλΌλ, λ³κ²½ λ΄μμ μ΄λν°μ μΊ‘μν λλ―λ‘ ν΄λΌμ΄μΈνΈ λ°λ νμX
[ν΄λμ€ λ€μ΄μ΄κ·Έλ¨]
μμ΄ν°μ μ΄μ΄ν°μ μκ°ν΄λ³΄μ
κ°μ₯ νν μ΄μ΄ν° μμ μμ΄ν°μ μ¬μ©νλ €λ©΄, μ μμ²΄κ° λ§μ§ μλλ€.
λ°λΌμ μ°λ¦¬λ μ΄λν°λ₯Ό λ°λ‘ ꡬ맀ν΄μ μ°κ²°ν΄μΌ μ΄λ° μ΄μ΄ν°λ€μ μ¬μ©ν μ μλ€
⇒ μ΄λν°λ νμλ‘ νλ μΈν°νμ΄μ€λ‘ λ°κΏμ£Όλ μν
μ½λλ‘ μ΄λν° ν¨ν΄ μ΄ν΄νκΈ°
μ€λ¦¬μ μΉ λ©΄μ‘° μΈν°νμ΄μ€ μμ±
λ§μ½ μ€λ¦¬ κ°μ²΄κ° λΆμ‘±ν΄μ μΉ λ©΄μ‘° κ°μ²΄λ₯Ό λμ μ¬μ©ν΄μΌ νλ€λ©΄?
λ κ°μ²΄λ μΈν°νμ΄μ€κ° λ€λ₯΄λ―λ‘, λ°λ‘ μΉ λ©΄μ‘° κ°μ²΄λ₯Ό μ¬μ©νλ κ²μ λΆκ°λ₯ν¨
λ°λΌμ μΉ λ©΄μ‘° μ΄λν°λ₯Ό μμ±ν΄μ νμ©ν΄μΌ νλ€
- μ½λ
- Duck.java
package AdapterPattern;
public interface Duck {
public void quack();
public void fly();
}
- Turkey.java
package AdapterPattern;
public interface Turkey {
public void gobble();
public void fly();
}
```
- **WildTurkey.java**
```java
package AdapterPattern;
public class WildTurkey implements Turkey {
@Override
public void gobble() {
System.out.println("Gobble gobble");
}
@Override
public void fly() {
System.out.println("I'm flying a short distance");
}
}
- TurkeyAdapter.java
package AdapterPattern;
public class TurkeyAdapter implements Duck {
Turkey turkey;
public TurkeyAdapter(Turkey turkey) {
this.turkey = turkey;
}
@Override
public void quack() {
turkey.gobble();
}
@Override
public void fly() {
turkey.fly();
}
}
- DuckTest.java
package AdapterPattern;
public class DuckTest {
public static void main(String[] args) {
MallardDuck duck = new MallardDuck();
WildTurkey turkey = new WildTurkey();
Duck turkeyAdapter = new TurkeyAdapter(turkey);
System.out.println("The turkey says...");
turkey.gobble();
turkey.fly();
System.out.println("The Duck says...");
testDuck(duck);
System.out.println("The TurkeyAdapter says...");
testDuck(turkeyAdapter);
}
public static void testDuck(Duck duck) {
duck.quack();
duck.fly();
}
}
- Bridge(λΈλ¦¬μ§)
- Composite(μ»΄ν¬μ§νΈ)
- Decorator(λ°μ½λ μ΄ν°)
- Facade(νΌμΈλ)
- Flyweight(νλΌμ΄μ¨μ΄νΈ)
- Proxy(νλ‘μ)
[νμ ν¨ν΄(Behavioral Pattern)]
ν΄λμ€λ κ°μ²΄λ€μ΄ μλ‘ μνΈ μμ©νλ λ°©λ²μ΄λ μ± μ λΆλ°° λ°©λ²μ μ μνλ ν¨ν΄
ex) νμ ν΄λμ€μμ ꡬνν΄μΌ νλ ν¨μ λ° μκ³ λ¦¬μ¦λ€μ 미리 μ μΈνμ¬, μμ μ μ΄λ₯Ό νμλ‘ κ΅¬ννλλ‘ ν¨
- Chain of responsibility(μ± μ μ°μ)
- Command(컀맨λ)
- Interpreter(μΈν°ν리ν°)
- Iterator(λ°λ³΅μ)
- Mediator(μ€μ¬μ)
- Memento(λ©λ©ν )
- Observer(μ΅μλ²)
- State(μν)
- Strategy(μ λ΅)
- Template Method(ν νλ¦Ώ λ©μλ)
- Visitor(λ°©λ¬Έμ)
'Web & Android > SpringBoot' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[SpringBoot] Thymeleaf - λ μ§ λ³ν (0) | 2023.08.17 |
---|---|
[SpringBoot] WASμ WS (0) | 2023.08.15 |
[SpringBoot] AOP(Aspect Oriented Programming) (0) | 2023.08.12 |
[SpringBoot] OOP(Object Oriented Programming) (0) | 2023.08.12 |
[SpringBoot] IoC &DI (0) | 2023.08.12 |