βπΎ [CS] DIPμ μ μμμ λ§νλ βμΆμνλ κ²βμ΄λ 무μμΌκΉ?β
μ°λ¦¬κ° μ μκ³ μλ SOLID μμΉ μ€ DIP(μμ‘΄μ± μμ μμΉ, Dependency Inversion Principle) μ μλ λ€μκ³Ό κ°μ΅λλ€.
- βκ³ μμ€ λͺ¨λμ μ μμ€ λͺ¨λμ μμ‘΄ν΄μλ μ λκ³ , λ λ€ μΆμν λ κ²μ μμ‘΄ν΄μΌ ν©λλ€.β
- μ¬κΈ°μ κ³ μμ€ λͺ¨λμ βλΉμ¦λμ€ λ‘μ§β μ λ»νκ³ , μ μμ€ λͺ¨λμ μΈλΆ ꡬνμ λ»ν©λλ€.
κ·Έλ λ€λ©΄ βμΆμνλ κ²β μ΄λ μ΄λ€ μλ―ΈμΌκΉμ?
πββοΈ SOLID μμΉ
πββοΈ μμ‘΄μ±
1οΈβ£ DIPμ μ μμμ λ§νλ βμΆμνλ κ²βμ΄λ?
- DIP(Dependency Inversion Principle, μμ‘΄μ± μμ μμΉ) μ μ μμμ λ§νλ βμΆμνλ κ²β μ μΈν°νμ΄μ€ λλ μΆμ ν΄λμ€λ₯Ό μλ―Έν©λλ€.
- μ΄ μμΉμμ βμΆμνλ κ²μ μμ‘΄ν΄μΌ νλ€βλ κ²μ, ꡬ체μ μΈ κ΅¬ν ν΄λμ€κ° μλ μΈν°νμ΄μ€λ μΆμ ν΄λμ€ κ°μ μΆμμ μΈ κ³μΈ΅μ ν΅ν΄ μνΈμμ©ν΄μΌ νλ€λ μλ―Έμ λλ€.
2οΈβ£ ꡬ체μ μΈ μ€λͺ .
- DIP(Dependency Inversion Principle, μμ‘΄μ± μμ μμΉ) μ κΈ°λ³Έ κ°λ μ κ³ μμ€ λͺ¨λ(λΉμ¦λμ€ λ‘μ§) κ³Ό μ μμ€ λͺ¨λ(μΈλΆμ μΈ κ΅¬ν) κ°μ μμ‘΄μ±μ μΆμνλ κ³μΈ΅μΌλ‘ λ€μ§λ κ²μ λλ€.
- μ¬κΈ°μ λ§νλ βμΆμνλ κ²β μ ꡬνμ΄ μλ κ³μ½μ μλ―Ένλ©°, μ΄ κ³μ½μ μΈν°νμ΄μ€λ μΆμ ν΄λμ€λ₯Ό ν΅ν΄ μ μλ©λλ€.
- κ³ μμ€ λͺ¨λ : μμ€ν μ μμ λ 벨μ μμΉνλ λͺ¨λλ‘, μΌλ°μ μΌλ‘ λΉμ¦λμ€ λ‘μ§μ μ²λ¦¬ν©λλ€.
- μ μμ€ λͺ¨λ : ꡬ체μ μΈ μΈλΆ μ¬νμ΄λ κΈ°μ μ μΈ κ΅¬νμ λ΄λΉνλ λͺ¨λμ λλ€. μλ₯Ό λ€μ΄, λ°μ΄ν°λ² μ΄μ€ μ²λ¦¬, νμΌ μμ€ν μμ λ€μ΄ ν΄λΉλ©λλ€.
πββοΈ λΉμ¦λμ€ λ‘μ§(Business Logic)μ΄λ?
πββοΈ μννΈμ¨μ΄ 곡νμμμ λͺ¨λ
πββοΈ λͺ¨λκ³Ό μ»΄ν¬λνΈλ₯Ό λ κ³ λΆλ‘μ λΉμ ν΄λ³΄λ©΄?!
μμ
- λ¨Όμ DIPλ₯Ό μλ°νλ μ½λ μμλ₯Ό λ³΄κ² μ΅λλ€.
- μ΄ μ½λλ κ³ μμ€ λͺ¨λμ΄ μ μμ€ λͺ¨λμ ꡬ체μ μΈ κ΅¬νμ μ§μ μ μΌλ‘ μμ‘΄νλ κ²½μ°μ λλ€.
class EmailService {
public void sendEmail(String message) {
// μ΄λ©μΌ μ μ‘ λ‘μ§
System.out.println("Email sent: " + message);
}
}
class NotificationManager {
private EmailService emailService;
public NotificationManager() {
this.emailService = new EmailService(); // μ μμ€ λͺ¨λμ ꡬ체μ ꡬνμ μμ‘΄
}
public void sendNotification(String message) {
emailService.sendEmail(message);
}
}
- μ΄ μ½λμμλ
NotificationManager
(κ³ μμ€ λͺ¨λ)κ°EmailService
(μ μμ€ λͺ¨λ)μ μ§μ μμ‘΄νκ³ μμ΅λλ€. - λ§μ½
NotificationManager
κ° λ€λ₯Έ μλ¦Ό λ°©λ²(μ: SMS)μ μ¬μ©νκ³ μΆλ€λ©΄,EmailService
μ κ°μ μ μμ€ λͺ¨λμ μμ νκ±°λ κ΅μ²΄ν΄μΌ νλ―λ‘ μ μ°μ±μ΄ λ¨μ΄μ§λλ€.
DIP μ μ© (μΆμνλ κ²μ μμ‘΄)
- DIPλ₯Ό μ μ©νλ©΄, κ³ μμ€ λͺ¨λκ³Ό μ μμ€ λͺ¨λ λͺ¨λ μΆμνλ κ³μΈ΅(μΈν°νμ΄μ€λ μΆμ ν΄λμ€) μ μμ‘΄νκ² λ©λλ€.
- μ΄λ κ² νλ©΄ κ³ μμ€ λͺ¨λμ μ μμ€ λͺ¨λμ ꡬ체μ μΈ κ΅¬νμ μμ‘΄νμ§ μκ² λμ΄, λ μ μ°νκ³ νμ₯ κ°λ₯ν μ½λκ° λ©λλ€.
// μΆμνλ κ²: Interface μ μ (μΆμνλ κ³μΈ΅)
interface NotificationService {
void sendNotification(String message);
}
// μ μμ€ λͺ¨λ: ꡬ체μ μΈ κ΅¬ν체
class EmailService implements NotificationService {
public void sendNotification(String message) {
System.out.println("SMS sent: " + message);
}
}
// μ μμ€ λͺ¨λ: λ λ€λ₯Έ ꡬ체μ μΈ κ΅¬ν체
class SMSService implements NotificatioonService {
public void sendNotificatioon(String message) {
System.out.println("SMS sent: " + message);
}
}
// κ³ μμ€ λͺ¨λ: μΆμνλ μΈν°νμ΄μ€μ μμ‘΄
class NotificationManager {
private NotificationService notificationService;
public NotificationManager(NotificationService notificationService) {
this.notificationService = notificationService // μΆμνλ κ²μ μμ‘΄
}
public void sendNotification(String message) {
notificationService.sendNotification(message);
}
}
μ€λͺ .
-
μΆμνλ κ²
-
NotificationService
μΈν°νμ΄μ€λ μΆμνλ κ²μ λλ€. - κ³ μμ€ λͺ¨λ(
NotificationManager
)μ μ΄μ ꡬ체μ μΈEmailService
λSMSService
μ μμ‘΄νμ§ μκ³ ,NotificationService
λΌλ μΆμνλ μΈν°νμ΄μ€μ μμ‘΄ν©λλ€.
-
-
ꡬ체μ μΈ κ΅¬ν
-
EmailService
μSMSService
λ κ°κ°NotificationService
μΈν°νμ΄μ€λ₯Ό ꡬνν μ μμ€ λͺ¨λμ λλ€.
-
κ²°κ³Ό.
- μ΄λ κ² νλ©΄
NotificatioonManager
λEmailService
λλSMSService
μ€ μ΄λ€ ꡬν체λ₯Ό μ¬μ©νλ μ§ μκ΄νμ§ μμ΅λλ€. - λ€λ₯Έ μλ¦Ό μλΉμ€κ° νμνλ€λ©΄, λ¨μν
NotificationService
λ₯Ό ꡬννλ μλ‘μ΄ ν΄λμ€λ₯Ό λ§λ€κ³ , μ΄λ₯ΌNotificationManager
μ μ λ¬νλ©΄ λ©λλ€. - μ¦, κ³ μμ€ λͺ¨λκ³Ό μ μμ€ λͺ¨λμ΄ λͺ¨λ μΆμνλ μΈν°νμ΄μ€μ μμ‘΄νκ² λμ΄, μ½λμ μ μ°μ±κ³Ό νμ₯μ±μ΄ ν¬κ² ν₯μλ©λλ€.
3οΈβ£ κ²°λ‘ .
- DIPμμ λ§νλ βμΆμνλ κ²β μ ꡬ체μ μΈ κ΅¬νμ²΄κ° μλ μΈν°νμ΄μ€ λλ μΆμ ν΄λμ€λ₯Ό μλ―Έν©λλ€.
- κ³ μμ€ λͺ¨λκ³Ό μ μμ€ λͺ¨λ λͺ¨λ μ΄ μΆμνλ κ³μΈ΅μ μμ‘΄ν¨μΌλ‘μ¨, κ° λͺ¨λ κ° κ²°ν©μ μ€μ΄κ³ μ μ°ν μμ€ν μ ꡬμΆν μ μμ΅λλ€.