ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 스프링 - 의존성 주입
    카테고리 없음 2024. 2. 16. 17:51

    스프링을 처음 접하게 됬다.

     

    코딩을 배울 때 어떤 도구를 처음 배우게 되면, 부담감을 느끼게 되는 이유중 하나가 갑작스럽게 마주하는 낯선 단어들 인 것 같다.

     

    처음 스프링을 해본 오늘 봐도, 뭔가 자주 쓸 것 같은 Annotation과, bean에 대한  단어의 설명을 봐도 이해가 제대로 되지 않았다.

     

    그래서 특히 이해가 가지 않았던 키워드들 중 하나인 "의존성 주입"에 대해서 깊이 파헤쳐서, 가장 작은 단위들로 만들어 이해해 보려고 한다.

     

    의존성 주입이란 단어를 봤을때, 주입 자체의 뜻은 알지만, 국어사전 내용을 안다고 해서 이해할 수 있는 단어는 아닌 것 같았다. 그에 대한 이해를 위해 조사를 진행해봤다.

     

    먼저 , 아래 코드들을  통해 "의존적" 인게 무엇이고, "주입"이 무엇을 의미하는지 좀 더 쉽게 알 수 있었다.

     

    public interface MyService {
        void doSomething();
    }
    
    public class MyServiceImpl implements MyService {
        @Override
        public void doSomething() {
            System.out.println("Doing something!");
        }
    }

     

    public class MyApp {
        private MyService myService;
    
        // @Autowired 어노테이션을 사용하여 의존성 주입
        @Autowired
        public void setMyService(MyService myService) {
            this.myService = myService;
        }
    
        public void run() {
            myService.doSomething();
        }
    }

     

    일단 당장 저 @Autowired 어노테이션은 무시해보자. 자바를 배운 내 기준으로는, MyApp 클래스의 setMyService 메서드는, 실행하기 위해서 MyService타입의 매개변수가 필요하다는 것을 볼 수 있다.

     

    그리고 그 매개변수를 전달받았을 때만 this.myService = myService; 코드가 실행될 것이다.

     

    다음으로, MyApp에서 아무 값 없이 선언하여 Null값이었던 변수에 매개변수로 받은 myService가 들어간다.

     

    그런 다음에야 public void run() 메서드에서,  매개변수를 받아서 값을 넣어주었던 private MyService myService 인스턴스의 doSomething() 메서드를 실행할 수 있을 것이다.

     

    이렇게 MyApp 클래스의 기능들을 사용하려면, 결국 MyService 타입의 변수가 필요한데, 이때를 "MyApp 클래스는 MyService 타입의 객체에 의존적이다" 라고 말할 수 있다.

     

    그리고 이렇게 MyApp 클래스의 기능들을 사용하기 위해 setMyService 메서드에 "MyService 타입의 객체" 매개변수를 넣어주는 것을 "주입 한다" 라고 한다.

     

     

    "스프링에서 의존성 주입을 자동으로 이행한다" 는 말은, 이렇게 풀어서 이해하면 좋을 것 같다.

     

    자바에서 내가 직접 매개변수가 필요한 메서드를 사용하려면, 해당 메서드를 가진 클래스 객체를 생성하고, 생성한 객체에 매개변수를 전달해서 해당 메서드를 실행해야 한다. 하지만 스프링에서는 이 과정을 자동으로 할 수 있다.

     

    이렇게 풀어서 설명하다 보니, 막상 저 "의존성 주입"이라는 단어에 머리가 아팠던게 이상하게 느껴진다.

     

    그냥 이젠 자바를 쓸때 당연하게 느껴지는  " 메서드에 매개변수 넣어서 쓴다 " 는 개념이었는데.

    다음엔 이렇게 풀어서 설명하다 보면 Annotation을 스스로 이해하는데도 도움이 될 것 같다.

    화이팅!

     

     

     

     

Designed by Tistory.