본문 바로가기

분류 전체보기72

[Spring] 의존관계 자동 주입 의존관계 주입은 크게 4가지 방법이 있다. 생성자 주입 수정자 주입(setter 주입) 필드 주입 일반 메서드 주입 생성자 주입 생성자를 통해서 의존관계를 주입받는 방법이다. @Component public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) { this.memberRepository = memberReposi.. 2022. 12. 27.
[Spring] 컴포넌트 스캔 지금까지 @Configuration와 @Bean을 이용하여 수동으로 스프링 컨테이너에 스프링 빈을 등록하는 방법을 사용하였다. 하지만 등록해야 할 빈의 개수가 너무 많다면 하나하나 수동으로 등록하기 쉽지 않을 수 있다. 그래서 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공한다. 컴포넌트 스캔 컴포넌트 스캔을 하기 위해서는 @ComponentScan을 설정 정보에 붙여주면 된다. @Configuration @ComponentScan public class AutoAppConfig { } 앞서 봤던 AppConfig와 달리 컴포넌트 스캔을 이용하면 @Bean을 등록하지 않아도 된다. 자동으로 @Component가 붙은 클래스를 스캔해서 스프링 빈으로 등록한다. @.. 2022. 12. 27.
[Spring] 싱글톤 패턴과 싱글톤 컨테이너 우리는 스프링 컨테이너에 저장된 빈들을 가져와서 사용할 수 있다. 하지만 만약 빈들을 가져올 때마다 new 연산자를 통해 객체를 새로 생성해서 가져올 경우 여러 비효율적인 문제가 있을 수 있다. 이와 같은 문제를 해결하기 위해 스프링 컨테이너는 객체 인스턴스를 싱글톤으로 관리한다. 싱글톤 패턴 싱글톤 패턴이란 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴이다. 구현방법은 다음과 같다. public class SingletonService { private static final SingletonService instance = new SingletonService(); public static SingletonService getInstance() { return instance; }.. 2022. 12. 26.
[Spring] 스프링 컨테이너와 스프링 빈 스프링에는 자바 객체를 관리해주는 공간인 스프링 컨테이너가 있다. 여기서 말하는 자바 객체란 빈(Bean)을 의미하는데, 스프링 컨테이너는 등록된 빈을 생성부터 소멸까지 관리해 준다. 스프링 컨테이너에 관한 인터페이스는 BeanFactory, ApplicationContext가 있다. 최상위 인터페이스인 BeanFactory를 상속받는 ApplicationContext 인터페이스가 있고 그 구현체 중 하나로 AnnotationConfigApplicationContext가 있다. BeanFactory는 스프링 빈을 관리하고 조회하는 역할을 담당한다. ApplicationContext는 BeanFactory의 모든 기능을 상속받을 뿐만 아니라 국제화 기능, 환경변수, 애플리케이션 이벤트, 리소스조회 같은 여.. 2022. 12. 26.
[Spring] AppConfig를 이용한 의존관계 주입 클래스를 설계할 때 앞서 말한 SOILD를 지키면서 하는 것이 중요하다 먼저 OCP, DIP를 지키지 않는 클래스를 간단한 자바 코드를 통해 살펴보겠다 public class MemberServiceImpl implements MemberService { private final MemberRepository memberRepository = new MemoryMemberRepository(); ... } public class OrderServiceImpl implements OrderService { private final DiscountPolicy discountPolicy = new RateDiscountPolicy(); ... } 각각 MemberService, OrderService에 대한 .. 2022. 12. 23.
[Spring] 객체 지향 5가지 원칙(SOLID) 객체지향 프로그래밍에는 설계할 때 지켜야 할 5가지 원칙, 일명 SOLID가 있다. ● SOLID - 클린코드로 유명한 로버트 마틴이 정리한 좋은 객체지향 설계의 5가지 원칙 • SRP: 단일 책임 원칙(single responsibility principle) • OCP: 개방-폐쇄 원칙 (Open/closed principle) • LSP: 리스코프 치환 원칙 (Liskov substitution principle) • ISP: 인터페이스 분리 원칙 (Interface segregation principle) • DIP: 의존관계 역전 원칙 (Dependency inversion principle) ● SRP 단일 책임 원칙 ( Single Responsibility Principle) 한 클래스는 .. 2022. 12. 21.