BackEnd/Spring

    [Spring] 스프링 핵심 원리 기본편 - 7. 의존관계 자동 주입

    7. 의존관계 자동 주입 다양한 의존관계 주입 방법 생성자 주입 수정자 주입(setter 주입) 필드 주입 일반 메서드 주입 생성자 주입 특징 생성자 호출 시점에 딱 1번만 호출되는 것이 보장됨 불변, 필수 의존관계에 사용 불변: 생성자 외에 외부에서 의존관계를 수정할 수 없음 필수: final, 꼭 값이 있어야 함 생성자가 딱 1개만 있으면 @Autowired를 생략해도 자동으로 지정됨 생성자 주입은 빈을 등록하면서 의존관계 주입도 같이 일어남 - 생성자를 호출하게 되기 때문에 수정자 주입 setter라 불리는 필드의 값을 변경하는 수정자 메서드를 통해 주입 특징 선택, 변경 가능성이 있는 의존관계에 사용 참고: @Autowired(required = false) → 주입할 대상이 없어도 동작하게 할 ..

    [Spring] 스프링 핵심 원리 기본편 - 6. 컴포넌트 스캔

    6. 컴포넌트 스캔 컴포넌트 스캔을 사용하려면 먼저 @ComponentScan을 설정 정보에 붙여주면 된다 참고: @Configuration이 붙은 설정 정보도 자동으로 등록되기 때문에 excludeFilters를 사용해서 컴포넌트 스캔 대상에서 제외 @ComponentScan은 @Component가 붙은 모든 클래스를 스프링 빈으로 등록 스프링 빈의 기본 이름은 클래스명을 사용하되, 맨 앞글자만 소문자를 사용 MemberServiceImpl 클래스 → memberServiceImpl 빈 이름 직접 지정도 가능 → @Component(”memberServiceImpl”) @Autowired 의존관계 자동 주입 생성자에 @Autowired를 지정하면 스프링 컨테이너가 자동으로 해당 스프링 빈을 찾아서 주입..

    [Spring] 스프링 핵심 원리 기본편 - 5. 싱글톤 컨테이너

    5. 싱글톤 컨테이너 웹 애플리케이션과 싱글톤 대부분 스프링 애플리케이션은 웹 애플리케이션 웹 애플리케이션은 보통 여러 고객이 동시에 요청을 한다 스프링 없는 순수한 DI 컨테이너 AppConfig: 요청을 할 때마다 객체가 새로 생성 해결 방안: 객체가 1개만 생성, 생성된 객체 인스턴스를 공유해서 쓰기 싱글톤 패턴 객체 인스턴스를 2개 이상 생성하지 못하도록 막기 package hello.core.singleton; public class SingletonService { private static final SingletonService instance = new SingletonService(); private SingletonService() { } public static SingletonSe..

    [Spring] 스프링 핵심 원리 기본편 - 4. 스프링 컨테이너와 빈

    4. 스프링 컨테이너와 빈 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); ApplicationContext : 스프링 컨테이너, 인터페이스 스프링 컨테이너를 생성할 때는 구성 정보를 지정해주어야 한다 @Bean 이 붙은 애들을 하나씩 호출 → 메서드 이름을 빈 이름으로, 반환하는 객체를 빈 객체로 등록 빈 이름은 항상 다른 이름을 부여 스프링 빈 의존관계 설정 설정 정보(AppcConfig)를 참고해서 의존관계 주입 스프링은 빈을 생성하고 의존관계를 주입하는 단계가 나누어져 있음 → 자바 코드로 스프링 빈을 등록하면 생성자를 호출하면서 의존관계 주입도 한꺼번에 처리 컨테이너에 등..

    [Spring] 스프링 핵심 원리 이해2 - 객체 지향 원리 적용

    스프링 핵심 원리 기본편 할인 정책을 바꾸려면 OrderServiceImpl 코드를 변경해야 함 역할과 구현을 충실하게 분리O 다형성 활용O, 인터페이스와 구현 객체를 분리함 OCP, DIP 객체 지향설계 원칙을 충실히 준수한 것처럼 보이지만 사실은 아님 DIP: 주문서비스 클라이언트(OrderServiceImpl)은 DiscountPolicy 인터페이스에 의존하면서 DIP를 지킨 것 같은데? 추상인터페이스 뿐만 아니라 구현 클래스에도 의존하고 있음 추상 인터페이스: DiscountPolicy 구현 클래스: FixDiscountPolicy, RateDiscountPolicy OCP: 변경하지 않고 확장? 지금은 기능을 확장해서 변경하면 클라이언트 코드에 영향을 줌 DIP 위반 → 추상(인터페이스)만 의존..

    [스프링/자바] 좋은 객체 지향 설계의 5가지 원칙: SOLID

    인프런 강의 '스프링 핵심 원리 - 기본편' 을 보고 정리한 내용입니다. 단순히 객체 지향 프로그래밍에 대한 개념만 이해하다가 강의를 들으니까 이제서야 객체 지향 설계가 무엇인지에 대한 개념이 생기는 것 같다. 특히 단순히 인터페이스와 클래스를 구현하는 것만으로는 SOLID 원칙을 모두 지킬 수 없다는 점이 크게 와닿았다. 스프링에 대한 필요성을 이해하는 데 좋은 것 같다. 다들 왜 이 강의를 추천하는 지 알 것 같음.. SOLID SRP: 단일 책임 원칙(single responsibility principle) 한 클래스는 하나의 책임만 가져야 한다 하나의 책임은 모호한 개념이다. SRP를 판단할 수 있는 중요한 기준은 변경 - 변경이 있을 때 파급 효과가 적으면 SRP를 잘 따른 것 한 클래스가 여..

    [Spring] 제어 역전 IoC와 의존성 주입 DI

    IoC와 DI 제어 역전(IoC) 일반적인 자바 개발: 객체 선언 > 의존성 생성 > 객체에서 제공 일련의 작업들을 개발자가 직접 제어함 제어 역전: 사용할 객체를 직접 생성하지 않고 객체의 생명주기 관리를 외부에 위임 ‘외부’: 스프링 컨테이너(Spring Container) 스프링에서 제어 역전 Bean: 스프링에서의 객체 Container: Bean의 인스턴스화 조립, 관리의 역할, 사용 소멸에 대한 처리 담당 객체 생성 의존성 객체 주입: 제어권을 스프링에게 위임하여 스프링이 만들어놓은 객체를 주입 의존성 객체 메소드 호출 스프링 컨테이너가 객체를 만드는 시기: 컨테이너가 만들어질 때 필요한 객체를 모두 생성 cf. lazy-init: getBean을 할 때마다 객체가 생성 기본: 싱글톤 패턴 s..

출처: https://gmnam.tistory.com/157 [Voyager:티스토리]