##IoC가 필요한 이유
를 강의를 들으면서 알아봤다.
The approach of outsourcing the construction and management of objects.
Inversion of Control(IoC) is design process of externalizing, the construction and management of objects.
한국말로는,
그림에 있는 App은 다른 스포츠 코치에게도 잘 적용이 되어야 된다.(easily change)
MyApp.java
BaseballCoach.java
Coach.java: interface after refactoring
TrackCoach.java
Code Demo를 위해서 다음 이름의 패키지를 생성
패키지를 생성하고 BaseballCoach라는 이름을 가진 Java Class를 생성해줌.
BaseballCoach.java의 기본 모양
package com.luv2code.springdemo;
public class BaseballCoach {
}
getDailyWorkout()이라는 코드를 씀
package com.luv2code.springdemo;
public class BaseballCoach {
public String getDailyWorkout() {
return "Spend 30 minutes on batting practice";
}
}
MyApp이라는 또 다른 클래스를 쓰기 위해서 com.luv2code.springdemo 폴더에서 New>Class를 해줌
MyApp은 main application이므로 public static void main(String[] args)에 체크를 해줌
그리고 다음과 같은 다이어그램을 가지기 위해서
함수를 써준다. MyApp.java 코드
package com.lub2code.springdemo;
public class MyApp {
public static void main(String[] args) {
// TODO Auto-generated method stub
//create the object
BaseballCoach theCoach = new BaseballCoach();
//use the object
System.out.println(theCoach.getDailyWorkout());
}
}
단축키) Eclipse Trick으로 CTRL + space하면 sysout을 선택하고 엔터를 치면 System.out.println();
Run As > Java Application 해준다.
그러면
Spend 30 minutes on batting practice
이 출력 된다.
Software Engineering Best Practice
Code to an interface
To Refactoring, Coach라는 이름의 interface를 만들었다.
package com.luv2code.springdemo;
public interface Coach {
public String getDailyWorkout();
}
인터페이스에 따라서 BaseballCoach.java에서는 다음과 같이 Override해서 함수 getDailyWorkout();를 쓰게 한다.
package com.luv2code.springdemo;
public class BaseballCoach implements Coach {
@Override
public String getDailyWorkout() {
return "Spend 30 minutes on batting practice";
}
}
TrackCoach에 관한 코드를 쓰기 위해서 TrackCoach라는 클래스를 만들어준다.
TrackCoach implements Coach interface이기 때문에
Coach theCoach = new TrackCoach();로 써준다.
Easily change the coach for another sport
Coach implementation은 configurable해야 되는데 MyApp.java를 보면 hardcoded하다.
우리가 config file로부터 the actual implementaion name을 읽을 수 있으면, 소스코드를 고치는 대신 우리가 config 파일을 바꿈으로써 쉽게 swap할 수 있다.
단어
externalizing-외부화
in a nutshell-간단히 말해서
출처: https://xianeml.tistory.com/74 [미현 개발 TIL:티스토리]
강의 출처:Udemy Spring & Hibernate for Beginners