μΆμ²
ChatGPT
μμ‘΄μ± μμ μμΉ(Dependency Inversion Principle, DIP)μ SOLID μμΉ μ€ νλλ‘, ν΄λ¦° μν€ν
μ²(Clean Architecture)μμ λ§€μ° μ€μν μν μ νλ€. DIPλ μννΈμ¨μ΄μ λͺ¨λ κ° μμ‘΄μ±μ ν¨κ³Όμ μΌλ‘ κ΄λ¦¬νμ¬ μμ€ν
μ μ μ°μ±κ³Ό νμ₯μ±μ λμ΄κ³ , μ½λμ λ³κ²½μΌλ‘ μΈν μν₯μ μ΅μννλ λ° κΈ°μ¬νλ€.
μμ‘΄μ± μμ μμΉ(Dependency Inversion Principle, DIP)
μ μ
μμ‘΄μ± μμ μμΉμ λ κ°μ§ μ£Όμ κ·μΉμΌλ‘ μ μλλ€.
- κ³ μμ€ λͺ¨λ(High-level Modules)μ μ μμ€ λͺ¨λ(Low-level Modules)μ μμ‘΄ν΄μλ μ λλ€. λ λ€ μΆμν(Abstractions)μ μμ‘΄ν΄μΌ νλ€.
- μΆμνλ ꡬ체μ μΈ κ²(Details, μΈλΆ μ¬ν)μ μμ‘΄ν΄μλ μ λλ€. ꡬ체μ μΈ κ²(μΈλΆ μ¬ν)μ΄ μΆμνμ μμ‘΄ν΄μΌ νλ€.
λͺ©ν
ꡬ쑰μ μΈ μ μ°μ±μ ν보νκ³ , λͺ¨λ κ°μ μμ‘΄μ±μ ν¨κ³Όμ μΌλ‘ κ΄λ¦¬νμ¬ λͺ¨λμ λ
립μ±κ³Ό μ¬μ¬μ©μ±μ λμ΄λ κ²μ΄λ€.
ν΄λ¦° μν€ν μ²μμμ μν
ν΄λ¦° μν€ν μ²λ μ£Όλ‘ λ€μκ³Ό κ°μ 4κ°μ§ μμΉμ λ°λ₯Έλ€.
- μν°νλΌμ΄μ¦ λΉμ¦λμ€ κ·μΉ
- μ ν리μΌμ΄μ λΉμ¦λμ€ κ·μΉ
- μΈν°νμ΄μ€ μ΄λν°
- νλ μμν¬ λ° λλΌμ΄λ²
μμ‘΄μ± μμ μμΉμ μ΄λ¬ν μν€ν
μ² λ μ΄μ΄μμ μμ‘΄μ±μ μμ μμΌ, λΉμ¦λμ€ λ‘μ§μ΄ νλ μμν¬, λ°μ΄ν°λ² μ΄μ€, UI λ±μ μν₯μ λ°μ§ μλλ‘ μ€κ³νλ€.
DIPκ° μμ€ν μ λ―ΈμΉλ μν₯
1. μ μ°μ±κ³Ό νμ₯μ± ν₯μ
- DIPλ₯Ό ν΅ν΄ μμ€ν μ ꡬμ±νλ λͺ¨λ κ°μ μμ‘΄μ±μ μ κ±°νκ±°λ μ€μΌ μ μλ€. μ΄λ‘ μΈν΄ μμ€ν μ μ μ°μ±μ΄ μ¦κ°νκ³ , μλ‘μ΄ κΈ°λ₯ μΆκ° λ° κΈ°μ‘΄ κΈ°λ₯ μμ μ΄ μ©μ΄ν΄μ§λ€.
- μλ₯Ό λ€μ΄, νΉμ λ°μ΄ν°λ² μ΄μ€λ₯Ό μ¬μ©νλ μ½λκ° μ§μ μμ‘΄νλ λμ μΈν°νμ΄μ€λ₯Ό ν΅ν΄ κ°μ μ μΌλ‘ μμ‘΄νκ² νλ©΄, λ°μ΄ν°λ² μ΄μ€λ₯Ό κ΅μ²΄ν λ μ½λ λ³κ²½μ μ΅μνν μ μλ€.
2. λ³κ²½ μ©μ΄μ±
- κ³ μμ€ λͺ¨λ(λΉμ¦λμ€ λ‘μ§)κ³Ό μ μμ€ λͺ¨λ(λ°μ΄ν°λ² μ΄μ€, UI λ±)μ λ 립μ±μ μ μ§ν¨μΌλ‘μ¨, νμͺ½μ λ³κ²½μ΄ λ€λ₯Έ μͺ½μ λ―ΈμΉλ μν₯μ μ΅μνν μ μλ€.
- μ΄λ μ½λ μ μ§λ³΄μμ±μ λμ΄κ³ , λ³κ²½μ 리μ€ν¬λ₯Ό μ€μ΄λ λ° κΈ°μ¬νλ€.
3. μ¬μ¬μ©μ± μ¦κ°
- μΆμνλ μΈν°νμ΄μ€λ₯Ό ν΅ν΄ λͺ¨λ κ° ν΅μ μ΄ μ΄λ£¨μ΄μ§λ―λ‘, κ³ μμ€ λͺ¨λμ΄ μ μμ€ λͺ¨λμ μΈλΆ ꡬνμ μμ‘΄νμ§ μκ² λλ€. μ΄λ₯Ό ν΅ν΄ κ³ μμ€ λͺ¨λμ λ€μν νκ²½μμ μ¬μ¬μ©μ΄ κ°λ₯ν©λλ€.
- μλ₯Ό λ€μ΄, λΉμ¦λμ€ λ‘μ§ λͺ¨λμ νΉμ μΉ νλ μμν¬μ μμ‘΄νμ§ μκΈ° λλ¬Έμ λ€μν UI νλ μμν¬μμ μ¬μ¬μ©ν μ μλ€.
4. ν μ€νΈ μ©μ΄μ±
- DIPλ ν μ€νΈνκΈ° μ¬μ΄ μ½λλ₯Ό λ§λ λ€. μμ‘΄μ±μ μ£Όμ λ°λ λͺ¨λμ ν μ€νΈ μ Mock κ°μ²΄λ μ€ν μ μ¬μ©νμ¬ λ 립μ μΌλ‘ ν μ€νΈν μ μλ€.
- μ΄λ λ¨μ ν μ€νΈμ μ λ’°μ±μ λμ΄κ³ , ν μ€νΈ 컀λ²λ¦¬μ§λ₯Ό ν₯μμν€λ λ° μ€μν μν μ νλ€.
5. κ²°ν©λ κ°μ
- DIPλ λͺ¨λ κ°μ κ²°ν©λλ₯Ό μ€μ΄κ³ μμ§λλ₯Ό λμ΄λ λ° κΈ°μ¬νλ€. λͺ¨λμ΄ μΆμνμ μμ‘΄ν¨μΌλ‘μ¨, νΉμ ꡬνμ μμ‘΄νλ λ¬Έμ λ₯Ό νΌν μ μλ€.
- μ΄λ μμ€ν μ λ μ μ°νκ³ νμ₯ κ°λ₯νκ² λ§λ€μ΄ μ€λ€.
μμ‘΄μ± μμ μμΉμ ꡬν μμ
Java μ
// μΆμν(μΈν°νμ΄μ€) μ μ
public interface PaymentProcessor {
void processPayment(double amount);
}
// μ μμ€ λͺ¨λ
public class PayPalPaymentProcessor implements PaymentProcessor {
@Override
public void processPayment(double amount) {
// PayPal κ²°μ μ²λ¦¬ λ‘μ§
System.out.println("Processing payment of $" + amount + " through PayPal.");
}
}
// κ³ μμ€ λͺ¨λ
public class ShoppingCart {
private final PaymentProcessor paymentProcessor;
// μμ±μ μ£Όμ
μ ν΅ν μμ‘΄μ± μμ
public ShoppingCart(PaymentProcessor paymentProcessor) {
this.paymentProcessor = paymentProcessor;
}
public void checkout(double amount) {
// λΉμ¦λμ€ λ‘μ§ μ²λ¦¬
paymentProcessor.processPayment(amount);
}
}
// μ¬μ© μμ
public class Main {
public static void main(String[] args) {
PaymentProcessor paymentProcessor = new PayPalPaymentProcessor();
ShoppingCart cart = new ShoppingCart(paymentProcessor);
cart.checkout(100.0);
}
}
Kotlin μ
// μΆμν(μΈν°νμ΄μ€) μ μ
interface PaymentProcessor {
fun processPayment(amount: Double)
}
// μ μμ€ λͺ¨λ
class PayPalPaymentProcessor : PaymentProcessor {
override fun processPayment(amount: Double) {
// PayPal κ²°μ μ²λ¦¬ λ‘μ§
println("Processing payment of \$$amount through PayPal.")
}
}
// κ³ μμ€ λͺ¨λ
class ShoppingCart(private val paymentProcessor: PaymentProcessor) {
fun checkout(amount: Double) {
// λΉμ¦λμ€ λ‘μ§ μ²λ¦¬
paymentProcessor.processPayment(amount)
}
}
// μ¬μ© μμ
fun main() {
val paymentProcessor: PaymentProcessor = PayPalPaymentProcessor()
val cart = ShoppingCart(paymentProcessor)
cart.checkout(100.0)
}
DIPμ μ΄μ κ³Ό μ£Όμμ¬ν
μ΄μ
- μ μ°ν μν€ν μ² : DIPλ₯Ό ν΅ν΄ μμ€ν ꡬ쑰λ₯Ό λ³΄λ€ μ μ°νκ² μ μ§ν μ μλ€.
- νμ₯μ± : μλ‘μ΄ κΈ°λ₯μ μ½κ² μΆκ°νκ³ , κΈ°μ‘΄ κΈ°λ₯μ λ³κ²½νλ λ° λλ λ Έλ ₯μ μ€μΌ μ μλ€.
- ν μ€νΈ κ°λ₯μ± : λͺ¨λμ λ 립μ μΌλ‘ ν μ€νΈν μ μμ΄ νμ§ λ³΄μ¦μ μ 리νλ€.
μ£Όμμ¬ν
- 볡μ‘μ± μ¦κ° : μ§λμΉκ² μΆμνλ₯Ό μ¬μ©νλ©΄ μ½λμ 볡μ‘μ±μ΄ μ¦κ°ν μ μλ€.
- κ³Όλν μ€κ³ : νλ‘μ νΈμ ν¬κΈ°λ μꡬμ¬νμ λ§μ§ μλ κ³Όλν μ€κ³λ μ€νλ € μ μ§λ³΄μλ₯Ό μ΄λ ΅κ² ν μ μλ€.
'λΉ κ΅¬λ© μ±μ°κΈ°' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Android] DI νλ μμν¬ λ° λΌμ΄λΈλ¬λ¦¬ (0) | 2024.07.29 |
---|---|
[DIP] μμ‘΄μ± μμ μμΉμ μ μ©ν μμ€ν μμ λͺ¨λ κ°μ μνΈμμ© (0) | 2024.07.29 |
[DI] DIμμ μμ±μ μ£Όμ κ³Ό setter μ£Όμ μ€ λ μ νΈλλ λ°©μ (0) | 2024.07.29 |
[μ©μ΄][Android] BTS (1) | 2024.07.29 |
[Android] Retrofit2 κΈ°λ³Έ μ€λͺ (0) | 2024.07.29 |