[Udemy Spring] IoC가 필요한 이유

리팩토링 벨로그·2022년 9월 29일
0

##IoC가 필요한 이유
를 강의를 들으면서 알아봤다.

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.

한국말로는,

IoC(Inversion of Control) 컨테이너: 객체의 관리를 스프링 컨테이너에게 아웃소싱한다. 컨테이너가 코드 대신 객체의 생성과 소멸을 관리할 수 있어서 IoC(제어의 역전)이라고 부른다. configuration.xml 파일이나 자바 소스코드 안에 어노테이션으로 컨테이너를 설정한다.


그림에 있는 App은 다른 스포츠 코치에게도 잘 적용이 되어야 된다.(easily change)

Code Demo


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";
    }
}

-ch19. 2차-


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할 수 있다.

그것 때문에 IoC 이용 예정!


단어

externalizing-외부화

in a nutshell-간단히 말해서

출처: https://xianeml.tistory.com/74 [미현 개발 TIL:티스토리]

강의 출처:Udemy Spring & Hibernate for Beginners

profile
글 다시 씁니다.

0개의 댓글