Spring
생성자 주입 방식을 써야하는 이유
스프링의 다양한 의존성 주입 방식 스프링에는 다양한 DI(Dependency Injection) 의존성 주입 방식이 있습니다. 종류는 다음과 같습니다. - 수정자 주입(Setter 주입) - 필드 주입 - 생성자 주입 여러 방법 중 스프링에서는 생성자 주입 방식을 권장합니다. 왜 DI를 할 때 생성자 주입을 해야 될까요? 각각의 의존관계 주입 방식의 특징과 차이에 대해서 자세히 살펴보도록 하겠습니다. 수정자 주입(Setter 주입 방식) @Getter @Controller public class MyController { private ServiceA service; @Autowired public void setService(ServiceA serviceA) { this.service = service..
AOP에 대하여
AOP AOP는 Aspect-Oriented-Programming의 약자를 뜻합니다. 서로 다른 클래스라 하더라도 비슷한 기능을 담당하는 부분은 존재할 수 있습니다. 예를 들어 다음과 같은 A B C 클래스가 존재한다고 가정해보겠습니다. 클래스안의 색깔 블록은 특정 기능을 수행하는 기능입니다. 만약 보라색 블록을 수정한다면 A B C 모든 클래스에서 일일이 수정해줘야 하기 때문에 유지 보수 측면에 있어서 굉장히 어려워지게 됩니다. 이런식으로 소스 코드 상에서 계속 반복해서 사용되는 부분들을 흩어진 관심사라고 합니다. 이를 해결하고자 나온게 AOP입니다. 흩어진 관심사를 모듈화를 통해 모아주고 어느 클래스에서 사용하는지 입력만 해주면 됩니다. 위 그림과 같이 클래스로 부터 블록들을 뺴와서 Aspect에 담..
Bean과 Component 뜯어보기
스프링 빈은 IoC 컨테이너가 관리하는 자바 객체로서 컨테이너에 의해 생명주기가 관리되는 개체를 의미합니다. 스프링에서는 해당 빈을 생성하는 방법으로 크게 2가지가 있습니다. Component 어노테이션과 Bean 어노테이션을 사용하는 방법이죠. 각각의 방법이 무슨차이가 있고 어떻게 사용해야 되는지 살펴보도록 하겠습니다. @Bean 개발자가 컨트롤이 불가능한 외부라이브러리들을 Bean으로 등록하고 싶은 경우에 사용되는 방법입니다. 사용 예시는 다음과 같습니다. Json 파싱을 해주는 ObjectMapper 클래스를 사용하려면 다음과 같이 Gradle 의존성을 설정해줘야 합니다. 그러고 나서 external library의 jackson-databind 패키지를 까보면 모듈 패키지 안에 ObjectMapp..
BeanFactory와 ApplicationContext의 차이점
BeanFactory 스프링 컨테이너의 최상위 인터페이스입니다. 스프링 빈을 관리 및 조회하는 역할을 수행합니다. ApplicationContext는 BeanFactory를 상속받은 관계입니다. ApplicationContext BeanFactory의 기능을 모두 상속 받아서 제공합니다. 빈을 관리하는 기능과 더불어 편리한 부가기능을 제공합니다. BeanFactory와 ApplicationContext의 차이점은? 로딩방식 BeanFactory는 빈을 필요한 시점에 로딩하는 LazyLoading 방식이지만 ApplicationContext는 처음부터 모든 빈을 로딩하는 EagerLoading방식을 취합니다. 따라서 BeanFactory가 ApplicationContext 보다 조금 가벼운 특성을 지닙니다..