π 'μ€νλ§ μ λ¬Έμ μν μλ° κ°μ²΄ μ§ν₯μ μ리μ μ΄ν΄' μ 'μ€νλ§μ΄ μ¬λν λμμΈ ν¨ν΄'μ 곡λΆνκ³ μ 리ν λ ν¬μ λλ€.
- μλ¦¬λ‘ λΉμ νμλ©΄, νμ€νλ μ리λ²
- λ§μ κ°λ°μλ€μ΄ κ³ λ―Όνκ³ μ μ ν μ¬μ€ μμ νμ€ μ€κ³ ν¨ν΄
- μ€μ κ°λ° νμ₯μμ λΉμ¦λμ€ μꡬ μ¬νμ νλ‘κ·Έλλ°μΌλ‘ μ²λ¦¬νλ©° λ§λ€μ΄μ§ λ€μν ν΄κ²°μ± μ€ λ§μ΄λ€ μΈμ ν best practiceλ₯Ό μ 리ν κ²
- κ°μ²΄ μ§ν₯ νΉμ±κ³Ό μ€κ³ μμΉμ κΈ°λ°μΌλ‘ ꡬνλ¨
- μ€νλ§μμμ λμμΈ ν¨ν΄λ€ β μλ° μν°νλΌμ΄μ¦ κ°λ°μ νΈνκ² ν΄μ£Όλ μ€νμμ€ κ²½λκΈ μ ν리μΌμ΄μ
νλ μμν¬ (μ€νλ§ νλ μμν¬ = OOP νλ μμν¬)
- μ€νλ§μμ μμν΄ κ°μ²΄ μ§ν₯μΌλ‘ ν₯νλ νν₯μ(Top-Down),
- κ°μ²΄ μ§ν₯μμ μμν΄ μ€νλ§μΌλ‘ ν₯νλ μν₯μ(Bottom-up)
- λμμΈ ν¨ν΄μ κ°μ²΄ μ§ν₯ νΉμ± μ€
μμ(extends)
,μΈν°νμ΄μ€(interface/implements)
,ν©μ±(κ°μ²΄λ₯Ό μμ±μΌλ‘ μ¬μ©)
μ μ΄μ©νλ€.
public class ServiceA {
void runServiceA() {
}
}
public class ServiceB {
void runServiceB() {
}
}
public class AdapterServiceA {
ServiceA s1 = new ServiceA();
void runService() {
s1.runServiceA();
}
}
public class AdapterServiceB {
ServiceB sB = new ServiceB();
void runService() {
sB.runServiceB();
}
}
// μ΄λν° ν¨ν΄ μ μ© μ
public class ClientWithNoAdapter {
public static void main(String[] args) {
ServiceA sA = new ServiceA();
ServiceB sB = new ServiceB();
sA.runServiceA();
sB.runServiceB();
}
}
// μ΄λν° ν¨ν΄ μ μ© ν
public class ClientWithAdapter {
public static void main(String[] args) {
AdapterServiceA asa1 = new AdapterServiceA();
AdapterServiceB asb1 = new AdapterServiceB();
asa1.runService();
asb1.runService();
}
}