package com.haenin.section05.dependencyinversion.resolved;

public class Application {
    public static void main(String[] args) {
        MessageSender emailSender = new EmailSender();
        MessageSender smsSender = new SMSSender();

        NotificationService emailService = new NotificationService(emailSender);
        NotificationService smsService = new NotificationService(smsSender);

        emailService.sendNotification("이메일로 발송될 공지입니다.");
        smsService.sendNotification("SMS으로 발송될 공지입니다.");
    }
}

package com.haenin.section05.dependencyinversion.resolved;

public interface MessageSender {
    void sendMessage(String message);
}

package com.haenin.section05.dependencyinversion.resolved;

public class EmailSender implements MessageSender{
    @Override
    public void sendMessage(String message) {
        System.out.println("이메일 발송: " + message);
    }
}

package com.haenin.section05.dependencyinversion.resolved;

public class SMSSender implements MessageSender{
    @Override
    public void sendMessage(String message) {
        System.out.println("SMS 발송: " + message);
    }
}

package com.haenin.section05.dependencyinversion.resolved;

public class NotificationService {
    private final MessageSender messageSender;

    public NotificationService(MessageSender messageSender) {
        this.messageSender = messageSender;
    }

    public void sendNotification(String message){
        messageSender.sendMessage(message);
    }
}