Spring

Inversion of Control Container ( Ioc Container )

Coarti 2023. 6. 14. 12:22

( 이전 글과 이어지는 내용입니다. https://cloakinghost.tistory.com/8 )

 

작성한 XML 파일을 읽어오는 코드를 작성해보자

메인함수에 작성한 부분을 바꿀것이다

Exam exam = new ScoreExam();
ExamConsole console = new GridExamConsole();
console.setExam(exam);

console.print();

   ApplicationContext context = new ClassPathXmlApplicationContext("spring/di/setting.xml");
// ExamConsole console = (ExamConsole) context.getBean("console");// 변수의 이름으로 꺼내면 타입을 바꿔야함, 사용타입이 많다면 불편할 것이다
									 
                                     // 구체화된 클래스도 가능
   ExamConsole console = context.getBean(ExamConsole.class); // 자료형명으로 꺼내보자 // 이 경우 인터페이스형식에 참조될수 있는 것을 돌려준다
		
   console.print();

( 위 코드로 변환 시 임포트가 되지않는다면 아래에 설명하도록 하겠습니다. )

 

보편적으로 어플리케이션의 루트부터 경로를 지정한다

경로기재 시 " / "를 사용하기에 주의하자

 

주석부분을 보자면 getBean() 함수로 조립된 객체를 가져오게 되어있다

이때 xml에 작성한 bean의 id로 불러올수 있는데 타입변환을 해야하는 경우가 생긴다

매번 변환을 해줘야하니 번거롭다

 

인터페이스 클래스정보를 넘겨 동적바인딩이 가능한 객체(구현체)를 받아 오도록 한다

이를 위해 처음에 인터페이스로 2개의 클래스를 구현한것이다

 

XML에 작성된 부품의 클래스명만 변경하여 동작할 수 있게 되었다

소스코드는 변경이 불필요하게 된것이다.

 


ApplicationContext, ClassPathXmlApplicationContext 임포트가 안될 시 조치방법이다

1. https://mvnrepository.com/ 방문

2. spring context 검색

3. 최신 RELEASE 버전 Dependency 복사

4. pom.xml 에 version 태그와 bulid 태그 사이에 dependencies 태그 생성

5. <dependencies> 붙혀넣기 </dependencies>

6. 저장

 

추가적으로 일반 자바프로젝트로 생성하였다면 pom.xml이 없을 것이다

1. 프로젝트 우클릭 - Configure - Converter to Maven Project

2. Group Id 필요시 변경 ( com.test 등등 )

3. finish 클릭


IoC Container

객체를 역순으로 생성하고 조립 관리 하는 컨테이너

여기서 역순은 가장 깊숙히 있는 부품(객체)부터 생성하여 조립한다는 의미

 

컨테이너 : 지시서에 있는 내용을 담는 그릇

728x90