spring-basic-core [인프런 / 김영한] 스프링 핵심 원리-기본편 스프링 핵심 원리 객체 지향 프로그래밍 다형성(Polymorphism) 역할과 구현 분리 다형성의 본질 객체 지향 설계의 5가지 원칙(SOLID) / 클린코
프로그램을 여러 개의 독립된 단위, 객체들의 모임으로 파악하여 서로 메시지를 주고받거나 데이터를 처리할 수 있다.(협력)유연하고 변경이 용이하다.추상화캡슐화상속다형성\*역할과 구현 분리 \- 역할(인터페이스) <=> 구현(구현 클래스 또는 객체) \- 클라이언트는
회원회원 가입과 회원 조회를 할 수 있다회원 등급은 일반과 VIP가 있다회원 데이터는 자체 DB와 외부 시스템 연결 중 미확정이다주문과 할인회원 등급에 따라 할인 정책을 적용한다VIP는 1000원을 할인해주는 고정 할인을 적용한다단, 위 할인 정책은 변경 가능성이 높고
새로운 할인 정책으로 변경할 때, 클라이언트 코드인 OrderServiceImpl의 코드도 변경해야 하는 문제 발생 --> OCP 위반OrderServiceImpl이 DiscountPolicy뿐만 아니라 FixDiscountPolicy에도 의존 --> DIP 위반App
일반적으로 ApplicationContext(interface)를 말함자바 설정 클래스(어노테이션 기반) XML 기반스프링 컨테이너 생성(AppConfig.class)스프링 빈 등록 \*빈 이름은 모두 달라야 함스프링 빈 의존관계 설정 준비스프링 빈 의존관계 설정 완료
순수한 DI 컨테이너는 요청할 때마다 새로운 객체를 생성함 -> 메모리 낭비싱글톤 패턴은 클래스의 인스턴스를 하나만 생성하여 공유하는 디자인 패턴싱글톤 패턴 적용 방법싱글톤 패턴의 문제점싱글톤 패턴을 구현하는 코드가 많아짐구체 클래스에 의존함 -> DIP 위반 -> O
설정 정보에 @ComponentScan 어노테이션을 붙임 컴포넌트 스캔을 사용하면 @Configuration이 붙은 설정 정보(ex. AppConfig)도 자동으로 등록되기 때문에 excludeFilter로 제외해야 함@Component가 붙은 클래스를 모두 스캔하여
생성자 주입: 일반적으로 주입하는 방법생성자 호출 시점에 한 번만 실행생성자가 1개인 경우, @Autowired 생략해도 자동 주입됨(스프링 빈인 경우)불변, 필수인 의존관계에 사용사용 권장 -> 대부분 의존관계 주입은 변경할 일이 없음, final 키워드 사용 가능c
데이터베이스 커넥션풀이나 네트워크 소켓과 같이 애플리케이션 초기화와 종료 작업이 필요한 경우스프링 빈의 이벤트 라이프사이클스프링 컨테이너 생성 -> 스프링 빈 생성 -> 의존관계 주입 -> 초기화 콜백 -> 사용 -> 소멸 전 콜백 -> 종료cf. 객체의 생성과 초기화
빈이 존재할 수 있는 범위스코프 종류싱글톤: 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지프로토타입스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입, 초기화까지만 관여함(관리,소멸 X)요청 시마다 항상 새로운 인스턴스를 생성하여 반환많이 사용하지는 않음웹