목록Spring/인프런_개념 (25)
빙응의 공부 블로그

📝롬복과 최신 트랜드 막상 개발을 해보면, 대부분이 다 불변이고, 그래서 다음과 같이 필드에 final 키워드를 사용한다. 그런데 생성자도 만들고, 주입받는 값을 대입하는 코드도 만들어야 한다. 스프링은 Lombok을 이용하여 간결하게 코딩이 가능하다. 생성자 자동 생성 기본코드 @Component public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discou..

📝다양한 의존관계 주입 방법 [Spring]의존성 주입(DI) (tistory.com) [Spring]의존성 주입(DI) 1. 의존성 주입에 대해 DI 두 객체 간의 관계를 결정해주는 디자인 패턴이다. DI는 인터페이스를 사이에 둬서 클래스 레벨에서의 의존관계가 고정되지 않도록 하고 런타임 시에 관계를 동적으로 quddnd.tistory.com 생성자 주입 수정자 주입 필드 주입 일반 메서드 주입 생성자 주입 이름 그대로 생성자를 통해서 의존 관계를 주입 받는 방법이다. 특징은 다음과 같다. 생성자 호출시점에 딱 1번만 호출되는 것을 보장(싱글톤) 불변, 필수 의존관계에 사용 불변 : 프로그래밍에는 모든 가능성을 열어두지 않고 불변성을 지켜야 하는 부분이 존재한다. 필수 : 생성자에는 값을 무조건 넣는 ..

📝컴포넌트 스캔과 의존관계 자동 주입 지금까지 스프링 빈을 등록할 때는 자바 코드의 @Bean이나 XML의 을 사용하였다. 실무에서는 수많은 빈이 있어 등록에 문제가 있다. 그래서 스프링은 설정 정보 없이 자동으로 스프링 빈을 등록하는 컴포넌트 스캔 기능을 제공한다. @Configuration @ComponentScan( //기존 예제 코드를 유지하기 위해 필터 excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class)) public class AutoAppConfig { } 컴포넌트 스캔을 사용하려면 먼저 @ComponentScan을 설정 정보에 붙여주어야 한다. 또한 excludeF..

📝웹 애플리케이션과 싱글톤 스프링은 태생이 기업용 온라인 서비스 기술을 지원하기 위해 탄생했다. 대부분의 스프링 애플리케이션은 웹 애플리케이션이다. 물론 웹이 아닌 애플리케이션 개발도 가능하다. 그리고 웹 애플리케이션 특성한 다중 처리가 필수이다. 기본적인 컨테이너는 서비스 요청마다 MemberServie 객체를 생성해야 된다. 그러나 이렇게 되면 사용자가 많을 시 수많은 객체가 생성되어 메모리 낭비가 심해진다. 그래서 스프링 컨테이너들은 1개의 객체만을 생성하는 싱글톤 패턴을 사용한다. 📝싱글톤 패턴 (추후 따로 포스팅할 예정) 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴이다. 그래서 객체 인스턴스를 2개 이상 생성하지 못하도록 막는 것이다. package com.example.b..

📝스프링 컨테이너 생성 //스프링 컨테이너 생성 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); ApplicationContext를 스프링 컨테이너라 한다. ApplicationContext는 인터페이스이다. 스프링 컨테이너는 XML 기반으로 만들 수 있고, 애노테이션 기반의 자바 설정 클래스로 만들 수 있다. 우리는 AppConfig를 사용했던 방식이 애노테이션 기반 자바 설정 클래스로 스프링 컨테이너를 만든 것이다. @Configuration public class AppConfig { @Bean public MemberService memberService(){ return ..

📝인터페이스 호출 방식의 문제점 public class OrderServiceImpl implements OrderService { // private DiscountPolicy discountPolicy = new FixDiscountPolicy(); private DiscountPolicy discountPolicy = new RateDiscountPolicy(); } 위 코드처럼 우리는 인터페이스를 호출한다. 빈 인터페이스에 구현체를 넣어주는 것이다. 하지만 이 방법을 사용 시 구현체가 자주 바뀌는 상황에서 ServiceImpl 본문을 수정해야 한다. 우리는 인터페이스 방법을 사용하면서 SOLID를 지켰다. 역할과 구현을 충실하게 분리했다. 다형성도 활용하고, 인터페이스와 구현 객체를 분리했다. 그..