본문 바로가기

Spring/Spring 핵심 원리8

#4 싱글톤 컨테이너 싱글톤 컨테이너 1. 순수한 DI 컨테이너의 문제점 스프링을 사용하지 않는 순수한 DI 컨테이너인 AppConfig는 코드상 요청을 받을 때마다 객체를 새로 생성 하게 된다. [스프링을 사용하지 않은 AppConfig] public class AppConfig { public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } public MemberRepository memberRepository() { return new MemoryMemberRepository(); } public OrderService orderService() { return new OrderServiceImp(memberRepos.. 2021. 5. 14.
#3 스프링 빈 조회 스프링 컨테이너 생성 과정 1. 스프링 컨테이너 생성 다음과 같은 형식으로 스프링 컨테이너를 생성 할 수 있다. [스프링 컨테이너 생성] //스프링 컨테이너 생성 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); new AnnotationConfigApplicationContext()를 사용해 컨테이너를 생성하며, 매개변수로 구성 정보를 넘긴다. ex) AppConfig와 같이 객체들의 의존 관계를 설정해 놓은 클래스 2. 스프링 빈 등록 의존 관계가 정의 된 메소드에 @Bean을 붙여 등록한다. 빈 이름은 메소드 이름을 사용한다. [빈 이름 지정] @Bean(name="이름") 위.. 2021. 5. 14.
#2 의존성 주입(DI), 제어의 역전( IOC), 스프링 컨테이너의 사용 의존성 주입 1. 의존성 주입(DI)의 필요성 다음과 같은 주문 서비스를 만든다고 하자. [주문 서비스 역할 관계도] 그림과 같이 주문 서비스는 회원 저장소와 할인 정책을 의존해서 역할을 수행한다. 스프링 핵심 원리 게시글은 위의 서비스를 제공하는것을 전제로 각종 예시를 설명할 예정이다. [주문 서비스 메서드 명 관계도] 위의 관계도는 주문 서비스에 사용되는 실질적인 클래스와 인터페이스 명과 의존관계를 나타낸다. 위의 관계도에서 알 수 있듯이 주문 서비스를 구현한 OderServiceImpl 클래스는 회원 저장소 역할의 MemberRepository와 할인정책 역할을 하는 DiscountPolicy의 인터페이스를 의존한다. 관계만 볼 경우 '추상화에 의존한다'라는 DIP와, 확장은 가능하며 변경은 불가인.. 2021. 5. 13.
#1 객체 지향 설계의 5가지 원칙(SOLD)과 Spring SOLID 1. SOLID란? 클린코드로 유명한 로버트 마틴이 제시한 좋은 객체 지향 설계의 5가지 원칙을 정리한 것 2. SRP : 단일 책임 원칙(single responsibility principle) 한 클래스는 하나의 책임만 가져야 한다. 하나의 책임이라는 것은 상황에 따라 다르다. 중요한 기준은 변경이다. 변경이 있을 때 파급 효과가 적으면 단일 책임 원칙을 잘 준수한 것이라고 볼 수 있다. 3. OCP : 개방-폐쇄 원칙(Open/close principle) 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다. 보통 다형성을 이용해서 해당 원칙을 준수한다. 그러나 다형성을 이용했음에도 절대적으로 OCP를 준수 하기는 어렵다. 클래스 내에서 의존성을 주입할 때, 결국에는 구현.. 2021. 5. 13.