public class HelloWorld{
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
위 helloWorld 애플리케이션은 확장성이 떨어집니다.다른 메세지를 출력하고 싶다면 어떻게 바꾸어야 할까요?그것은 외부에서 입력받아 출력하는것 입니다.
public class HelloWorldWithCommandLine {
public static void main(String[] args) {
if (args.length > 0) {
System.out.println(args[0]);
} else {
System.out.println("Hello World!");
}
}
}
이렇게 명령줄로 메세지를 입력 받으면 다른 메세지를 출력할 수 있습니다.하지만 더 유지보수가 쉽게 이번에는 메세지 출력 컴포넌트와 메세지 입력받는 컴포넌트로 분리하여 프로그래밍을 해봅시다.
public interface MessageProvider {
String getMessage();
}
public class HelloWorldMessageProvider implements MessageProvider {
@Override
public String getMessage() {
return "Hello World!";
}
}
public interface MessageRenderer {
void render();
void setMessageProvider(MessageProvider messageProvder);
MessageProvider getMassageProvider();
}
public class StandardOutMessageRenderer implements MessageRenderer {
private MessageProvider messageProvider;
@Override
public void render() {
if (messageProvider == null) {
throw RuntimeException(
"You must set the property messageProvider of class:"
+ StandardOutMessageRenderer.class.getName());
}
System.out.println(messageProvider.getMessage());
}
@Override
public void setMessageProvider(MessageProvider messageProvider) {
this.messageProvider = messageProvider;
}
@Override
public MessageProvider getMassageProvider() {
return this.messageProvider;
}
}
위와 같이 MessageProvider는 메세지 획득을 담당하고 MessageRenderer는 메세지 출력을 담당합니다. 이제 main() 메서드를 작성하면 됩니다.
public class HelloWorldDecoupled {
public static void main(String[] args) {
MessageRenderer mr = new StandardOutMessageRenderer();
MessageProvider mp = new HelloWorldMessageProvider();
mr.setMessageProvider(mp);
mr.render();
}
}
이렇게 HelloWorld 애플리케이션의 유지보수가 쉬워졌고 유연해졌습니다.