이 시리즈는 인프런 강의(김영한 님의 ‘스프링 핵심 원리 - 기본편’)로 공부하며 혼자 기록하고, 사람들과도 공유할 수 있도록 작성하는 글이다. 최대한 추가적인 정보는 공식 홈페이지, 문서를 보며 얻을 예정이다.
(개인적인 생각과 이해가 들어가 있기 때문에 저의 ‘무식함’이 있을 수 있습니다😜 혹시라도 이 글을 보게 되시는 분이 계시다면 잘못된 부분 댓글로 많이 알려주시면 너무 감사하겠습니다!!)
GitHub Repository : https://github.com/jcw1031/spring-core-study
그동안 순수 자바로 개발하고 DI를 적용했다. 이제 스프링을 사용해 보도록 하자.
코드를 먼저 작성해 보고, 그 후에 스프링 컨테이너에 대해 설명을 하도록 하겠다.
AppConfig
는 구성 정보를 가지는 클래스이다. 설정을 구성한다는 의미의 Configuration 어노테이션
을 클래스 위에 추가해 준다.
그 후에 각 메서드에 Bean 어노테이션
을 붙여 주면, 스프링 컨테이너에 스프링 빈으로 등록된다.
원래는 MemberApp
에서 AppConfig
를 생성하고 메서드를 호출하여 필요한 객체를 주입받는 형식이었다. 이제 스프링 컨테이너를 사용하여 주입하도록 해보자.
원래 코드는 주석으로 처리하고, ApplicationContext
객체를 생성하는데 이때 매개변수로 설정 클래스를 넘겨준다.(AppConfig.class
) ApplicationContext
가 스프링 컨테이너이다.
그리고 스프링 컨테이너의 getBean()
메서드를 통해 메서드 이름과 반환 타입을 매개변수로 전달하여 구현 객체를 반환받는다.
OrderApp
도 마찬가지로 변경해 주면 된다.
MemberApp
과 OrderApp
을 모두 실행해 보면, 스프링 관련 로그가 출력된 후에 이 전과 동일한 결과가 출력되는 것을 확인할 수 있다.
ApplicationContext
가 스프링 컨테이너이다.@Configuration
어노테이션이 붙은 클래스를 구성 정보로 사용한다.@Bean
어노테이션이 붙은 메서드들을 모두 호출하여 반환된 객체를 스프링 컨테이너에 등록한다. 이 등록된 객체를 ‘스프링 빈’이라고 한다.(이름 귀엽다. 스프링 콩)ApplicationContext
의 getBean()
메서드를 사용해 찾을 수 있다.스프링으로 변경하고 코드가 더 복잡해졌다고 생각할 수 있다. 하지만 스프링 컨테이너를 사용할 때의 장점이 굉장히 많다. 어떤 장점들이 있는지는 앞으로 천천히 공부해 보며 알게 될 것이다.
드디어 예제에 스프링 컨테이너를 사용하도록 변경해 보았다. 다음 시간에는 등록된 스프링 빈을 조회하는 코드를 작성해 보자!