본문 바로가기

Spring13

스프링 컨테이너 BeanFactory와 ApplicationContext BeanFactory는 Spring 에서 사용하는 컨테이너들의 최상위 컨테이너이다. BeanDefinition 빈 설정 메타정보라고 하며 스프링이 다양한 형태의 설정 정보를 BeanDefinition으로 추상화 해서 사용한다. 2022. 8. 13.
Practice4. 스프링 컨테이너와 스프링 빈 스프링 컨테이너 생성 앞서 new AnnotationConfigApplicationContext(AppConfig.class); 를 통해 스프링 컨테이너를 생성하고 설정 정보를 참고하여 스프링 빈을 등록 후 의존관계를 설정하였다. 원래 스프링에서는 빈을 생성하고 의존 관계를 주입하는 단계가 나누어져 있다. 그러나 현재 실습에서와 같이 자바 코드로 스프링 빈을 등록할 경우 생성자를 호출하면서 의존관계 주입더 한 번에 처리된다. 이는 의존관계 자동 주입 파트에서 자세히 다룬다. 컨테이너에 등록된 모든 빈 조회 2022. 8. 13.
Practice3. 객체지향 원리 적용 새로운 할인 정책 개발 RateDiscountpolicy 추가 Issue 할인 정책을 변경하려면 클라이언트(0rderServiceImpl) 코드를 직접 수정해야 한다. 그렇게 되면 DIP/OCP를 위반하게 된다. DIP 구현체 의존 DiscountPolicy discount = new FixDiscountPolicy(); OCP 위반 클라이언트 코드 변경 //DiscountPolicy discount = new FixDiscountPolicy(); DiscountPolicy discount = new RateDiscountPolicy(); 해결 방안 클라이언트에 DiscountPolicy의 구현 객체를 대신 생성하고 주입할 무언가가 필요하다. 관심사의 분리 AppConfig 생성 애플리케이션의 전체 동작.. 2022. 8. 8.
Practice2. 주문과 할인 도메인 설계 비즈니스 요구사항 회원 회원을 가입하고 조회할 수 있다. 회원은 일반과 VIP 두 가지 등급이 있다. 회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다. (미확정) 주문과 할인 정책 회원은 상품을 주문할 수 있다. 회원 등급에 따라 할인 정책을 적용할 수 있다. 할인 정책은 모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적용해달라. (나중에 변경 될 수 있다.) 할인 정책은 변경 가능성이 높다. 회사의 기본 할인 정책을 아직 정하지 못했고, 오픈 직전까지 고민을 미루고 싶다. 최악의 경우 할인을 적용하지 않을 수 도 있다. (미확정) 주문 도메인 설계 주문 도메인 관계도 주문 생성 : 클라이언트에서 주문 서비스에 주문 생성 요청 회원 조회 : 등급 별 할인 여부 확인을.. 2022. 8. 6.
Practice1. 도메인 설계 비즈니스 요구사항 회원 회원을 가입하고 조회할 수 있다. 회원은 일반과 VIP 두 가지 등급이 있다. 회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다. (미확정) 주문과 할인 정책 회원은 상품을 주문할 수 있다. 회원 등급에 따라 할인 정책을 적용할 수 있다. 할인 정책은 모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적용해달라. (나중에 변경 될 수 있다.) 할인 정책은 변경 가능성이 높다. 회사의 기본 할인 정책을 아직 정하지 못했고, 오픈 직전까지 고민을 미루고 싶다. 최악의 경우 할인을 적용하지 않을 수 도 있다. (미확정) 회원 도메인 설계 회원 도메인 관계도 회원 클래스 다이어그램 회원 객체 다이어그램(참조 관계) 구현 클래스 회원 엔티티(등급/엔티티/저장.. 2022. 8. 6.
객체 지향 설계와 스프링 좋은 객체 지향 설계란? 좋은 객체 지향를 설계하기 위해서는 역할과 구현을 분리하여 설계할 수 있어야 한다. e.g. 공연을 설계할 때 배역에 대한 역할을 설계하고 배우는 언제든지 유연하게 변경할 수 있도록 만든다. 이를 위해 이상적으로는 인터페이스를 도입하는 것이 좋지만 추상화가 될 경우 비용이 발생하는 단점이 따라온다. 하여 기능을 확장해야 되는 케이스가 발생하지 않는다면 구체 클래스를 직접 사용하고 향후 필요 시 리팩토링을 통해 인터페이스를 도입할 수도 있다. 좋은 객체 지향 설계의 5가지 원칙(SOLID) SRP(single resposibility principle) 한 클래스는 하나의 책임만 가져야 한다. 변경 상황에 따르는 파급 효과를 최소화 할 수록 SRP를 잘 지킨 것이라 할 수 있다. .. 2022. 7. 15.