본문 바로가기

Spring/Basic9

스프링 컨테이너 ApplicaitonContextAnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);스프링 컨테이너라고 부름인터페이스스프링 컨테이너 생성 과정스프링 컨테이너를 생성할 때는 구성 정보를 지정해주어야 함여기서는 AppConfig.class를 구성 정보로 지정빈 이름은 메서드 이름을 사용빈 이름은 직접 부여 가능@Bean(name = "빈 이름 지정")빈 이름은 항상 다른 이름을 부여스프링으로 전환하기package hello.core;import hello.core.discount.DiscountPolicy;import hello.core.discount.FixDiscountPolicy;i.. 2024. 8. 17.
AppConfig 할인 정책 적용과 문제점public class OrderServiceImpl implements OrderService { //private final DiscountPolicy discountPolicy = new FixDiscountPolicy(); private final DiscountPolicy discountPolicy = new RateDiscountPolicy();}문제점1. DIP 위반 : 인터페이스 뿐만 아니라 구현 클래스에도 의존추상 인터페이스 의존 : DiscountPolicy구현 클래스 의존 : FixDiscountPolicy, RateDiscountPolicy2. OCP 위반 : 기능을 확장해서 변경하려면 클라이언트 코드에 영향을 줌FixDiscountPolicy에서 Rat.. 2024. 8. 15.
좋은 객체 지향 설계의 5가지 원칙(SOLID) 다형성의 본질인터페이스를 구현한 객체 인스턴스를 실행 시점에 유연하게 변경할 수 있다.클라이언트(호출하는 코드)를 변경하지 않고, 서버(호출 당하는 코드)의 구현 기능을 유연하게 변경할 수 있다.중요점유연하며 변경이 용이확장 가능한 설계클라이언트에 영향을 주지 않는 변경 가능인터페이스를 안정적으로 잘 설계하는 것이 중요한계역할(인터페이스) 자체가 변하면 클라이언트, 서버 모두 큰 변경이 발생인터페이스를 안정적으로 잘 설계하는 것이 중요SOLIDSRP(single responsibility principle) : 단일 책임 원칙OCP(Open/closed principle) : 개방-폐쇄 원칙LSP(Liskov substitution principle) : 리스코프 치환 원칙ISP(Interface seg.. 2024. 8. 13.