heoblitz
Blitz.dev
heoblitz
전체 방문자
오늘
어제
  • 분류 전체보기 (36)
    • iOS Dev (22)
      • iOS (3)
      • Swift (7)
      • Testing (3)
      • Reactive (2)
      • Architecture (2)
      • Layout (1)
    • PS (4)
      • Algorithm (4)
    • Other (9)
      • Springboot (3)
      • Linux (1)
      • Python (1)
      • Java (1)
      • React (1)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • github
  • SWIFT
  • Git
  • RxSwift
  • XCTest
  • Code Review
  • Test Code
  • java
  • intellij
  • chrome-extension
  • springboot
  • URLSession
  • ARC
  • IOS
  • swift 윈도우
  • codingtest
  • 오픈소스
  • gradle
  • xcode
  • swift 5

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
heoblitz

Blitz.dev

카테고리 없음

스프링 부트 Inversion of Control ( IOC )

2020. 2. 25. 19:19

Inversion of Control ( IOC ) 란 무엇인가?

직역한다면 "제어의 역전" 입니다.

public class Hello() {

	private HelloResponseDto dto = new HelloResponseDto();
    
	...

}

 

위 코드는 자바에서 쉽게 볼 수 있는 코드입니다. Hello 클래스에서 HelloResponseDto 객체를 사용하기 위해

 

Hello 클래스 내부에서 new 키워드로 "직접" 객체를 생성하고 있습니다.

 

 

 

 

아래 코드를 한번 볼까요?

public class Hello() {

	private HelloResponseDto;
    
    
	hello(helloResponseDto dto) {
    	
		self.HelloResponseDto = dto;
        
	}


	...
}

 

Hello 클래스 생성자를 통해 "외부" 에서 객체를 할당 받고 있습니다. 이런 경우에 Hello 클래스 만으로는

 

의존성을 충족시킬 수 없습니다. 외부에서 생성자를 통해 의존성을 주입해주어야 합니다.

 

따라서 "제어가 역전" ( IOC ) 되었다고 볼 수 있습니다.

 

 

만약 그대로 실행한다면 self.HelloResponseDto 가 가르키는 것은 아무것도 없으므로

 

NullPointException(NPE) 오류가 발생할 것입니다. 여기서 왜 스프링에서 IOC 를 사용하는 이유를 알 수 있습니다.

 

 

스프링 컨터이너에게 생성자 호출, 객체 생명 주기의 관리를 맡기면서

 

개발자는 비지니스 로직에 신경쓸 수 있도록 하는데 큰 이유가 있습니다.

 

@Controller
public class Hello {

	private HelloResponseDto dto;
    
	@Autowired
	public Hello(HelloResponseDto dto) {
    
		this.dto = dto;
        
	}
    
	...
}

 

위 코드 처럼 스프링에서는 new 키워드를 통한 객체 생성이 아닌

 

@AutoWired 어노테이션을 통해 의존성 주입을 받습니다.

 

 

 

어떻게 스프링 프레임워크에게 객체를 생성을 위임하고, 설정하는지는 

 

Bean 과 DI ( Dependency Injection ) 에 대한 공부가 필요합니다.

 

 

참고 : https://youtu.be/NZ_lPFvu9oU
    heoblitz
    heoblitz
    iOS, Swift 관련 포스팅을 주로 작성합니다.

    티스토리툴바