1. 컴포넌트 스캔스프링이 관리하는 컨테이너 내에서 개발자가 정의한 빈(Bean)을 자동으로 찾아서 스프링 컨테이너에 등록하는 메커니즘 2. 컴포넌트 스캔의 필요성컴포넌트 스캔을 하지 않으면 아래 코드와 같이 @Bean으로 일일이 등록해줘야한다.실제 개발환경에서는 훨씬 많은 빈(Bean)이 등록될텐데 이런 반복되는 작업을 컴포넌트 스캔으로 줄일 수 있다.@Configuration //설정정보에 적어주는 어노테이션public class AppConfig { @Bean //스프링 컨테이너에 등록이 된다. public MemberService memberService(){ return new MemberServiceImpl(memberRepository()); } @..
1. 싱글톤 패턴의 필요성웹 어플리케이션은 고객이 계속 요청을 하는데 현재 코드상으로는 고객이 요청을 할때마다 memberService객체가 매번 만들어지는 문제가 있다. ✅Appconfig코드//import는 생략했다.@Configuration //설정정보에 적어주는 어노테이션public class AppConfig { @Bean //스프링 컨테이너에 등록이 된다. public MemberService memberService(){ return new MemberServiceImpl(memberRepository());//생성자 주입 //MemberServiceImpl이 필요로 하는 MemberRepository 의존성을 외부에서 주입 } @Bean ..
1. AppConfig 란?- 애플리케이션의 전체 동작 방식을 구성(config)하기 위해, 구현 객체를 생성하고, 연결하는 책임을 가지는 별도의 설정 클래스 2. AppConfig의 필요성- 클라이언트 코드는 구체클래스에 의존하면 안된다.(인터페이스에만 의존해야한다.) 3. 구체클래스에 의존하는 예제 코드public class OrderServiceImpl implements OrderService {// private final DiscountPolicy discountPolicy = new FixDiscountPolicy(); private final DiscountPolicy discountPolicy = new RateDiscountPolicy();}위 코드를 보면 DiscountPolicy가 ..
1. 스프링의 핵심 가치- 스프링은 자바 언어 기반의 프레임워크- 좋은 객체 지향 어플리케이션을 개발할 수 있도록 도와주는 프레임워크 2. 다형성역할과 구현으로 구분하여, 단순해지고 유연해지고 변경도 편리해진다.클라이언트는 대상의 역할만 알면 된다. (인터페이스)클라이언트는 구현 대상의 내부 구조를 몰라도 된다.클라이언트는 구현 대상의 내부 구조가 변경되어도 영향을 받지 않는다.클라이언트는 구현 대상 자체를 변경해도 영향을 받지 않는다.인터페이스를 구현한 객체 인스턴스를 실행 시점에서 유연하게 변경할 수 있다.클라이언트(요청하는 쪽)를 변경하지 않고, 서버(응답하는 쪽)의 구현 기능을 유연하게 변경할 수 있다. *서버가 응답을 한다고 꼭 데이터를 뱉어내는 건 아니다. 내부적으로 프린트할 수도 있고 리턴값..