본문 바로가기
SpringBoot

import와 의존성 주입은 다른가?

by devebucks 2020. 8. 23.
728x90

안녕하세요.

웹 앱을 따라 만드는 강의를 들으면서(저도 이런 생각이 드는 걸 보면... 아주 심각하게 모르는가 봅니다..) import로도 다른 패키지의 클래스를 가져다 사용하면서... 왜 동일하게 기능을 하는 의존성 주입을 사용하는 걸까요? 

 

import도 의존성 주입이 아닌가요???????

뚱이가 머리에 돌을 맞았다.

 

 

일단, 저는 지금까지 import가 정확히 어떤 의미를 가지고 어떤 역할을 하는지 알지 못했습니다. 그 개념부터 알아보겠습니다.

저는 집에 있는 자바의 정석 책을 통해서 알아보았습니다.

import문의 역할은 컴파일러에게 소스파일에 사용된 클래스의 패키지에 대한 정보를 제공하는 것이다. 컴파일 시에 컴파일러는 import문을 통해 소스파일에 사용된 클래스들의 패키지를 알아낸 다음, 모든 클래스이름 앞에 패키지명을 붙여 준다.

참고로, 임포트 문이 아무리 많이 달려도 프로그램 성능에 전혀 영향을 미치지 않는다고...

그니까.... import문의 역할은 다음과 같습니다.

import쓴 소스코드 import 안 쓴 소스코드
import java.util.Date;

class devkis{
     public static void main(String args[]){
          Date today = new Date();
     }
}
class devkis{
     public static void main(String args[]){
          java.util.Date today = new java.util.Date();
     }
}

↑위의 소스는 Java의 정석 책을 참고했습니다.

 

결과적으로, import는 클래스에 다른 객체의 패키지 주소를 선언해 줄 때 사용하는 키워드일 뿐이었습니다. 컴파일러가 정확하게 사용할 클래스의 패키지를 식별하도록, 클래스의 패키지 명을 소스코드 앞에 미리 명시를 해주는 키워드였던 것이지요. 

 

 반면에, 의존성 주입은 IOC 컨테이너에 등록된 bean을 IOC컨테이너에 마찬가지로 등록된 bean이 field, setter, contsructor의 방식으로 가져다 사용하는 것을 말합니다. 이렇게 서로 다른 bean이 서로 의존할 수 있도록 의존성을 주입해수는 것은 Spring framework의 ApplicationContext가 이 역할을 담당하고 있습니다.

 

결과적으로, 글의 처음에 가졌던 의문인 "import도 의존성 주입이 아닌가요?"라는 의문의 답은 "아니오"였습니다.

 

 

이상으로, import는 객체를 주입해주는 것이 아니라, 주소를 표시해주는 역할만 할 뿐이란 것을 알아보는 글이었습니다.

감사합니다.

728x90

댓글