[스프링 핵심 원리] 의존 관계 자동 주입
·
Back-end/Spring
💡 의존 관계 주입 방법의존관계 주입은 크게 4가지 방법이 있다.생성자 주입수정자 주입(setter 주입)필드 주입일반 메서드 주입보통 생성자 주입을 사용한다.이제 각 주입에 대해 살펴보자.생성자 주입생성자 호출 시점에 딱 1번만 호출되는 것이 보장되는 방식불변, 필수 의존관계에 사용한다.final 필드여야만 함(불변)@Componentpublic class OrderServiceImpl implements OrderService{ private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public OrderServiceImpl(MemberReposi..
[스프링 핵심 원리] 컴포넌트 스캔
·
Back-end/Spring
💡 컴포넌트 스캔과 의존 관계 자동 주입이전 글 - 싱글톤 패턴과 싱글톤 컨테이너이전 글에서는 AppConfig 클래스에 @Bean을 작성해서 스프링 빈으로 등록했다.등록해야 할 빈이 몇 개 안된다면 상관없지만 빈을 수십, 수백개를 등록해야 한다면 설정 정보가 너무 커지고 누락 가능성이 있어서 비효율적이다.따라서 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 @ComponentScan이란 기능이 있고 의존관계 주입도 @Autowired라는 기능이 있다.@ComponentScan, @Component, @Autowired@ComponentScan을 설정 정보(AppConfig.java)에 붙이면 @Component가 붙은 클래스를 스캔해서 자동으로 스프링 빈으로 등록한다.@ComponentScan@C..
[스프링 기본 원리] 싱글톤 컨테이너
·
Back-end/Spring
💡 싱글톤 패턴이란?시스템 전체에서 동일한 객체를 공유하고 싶을 때 사용하는 방식으로써 한 클래스의 객체를 하나만 생성하도록 제한하는 방식이다.싱글톤 패턴을 사용하는 이유웹 어플리케이션은 보통 여러 명의 클라이언트가 동시에 요청을 한다.여러 요청이 동시에 들어올 경우 아래 그림과 같이 요청이 들어 오는 만큼 객체를 생성하고 요청이 끝나면 소멸한다.이 방식은 메모리 낭비가 너무 심해져서 성능에 문제가 생긴다.이러한 문제를 해결하기 위한 방식이 싱글톤 패턴이다.싱글톤 패턴을 적용한 어플리케이션은 아래 그림과 같이 여러 요청이 들어와도 하나의 객체만을 사용하게 된다.싱글톤 패턴의 문제점 싱글톤 구현static 영역에 인스턴스를 미리 하나 생성하여 올려두고 getInstance() 요청이 들어오면 static..
[스프링 핵심 원리] 스프링 컨테이너와 스프링 빈
·
Back-end/Spring
💡 스프링 컨테이너와 스프링 빈ApplicationContext는 스프링 컨테이너고 인터페이스이다.new AnnotationConfigApplicationContext(AppConfig.class);는 ApplicationContext 인터페이스 구현체이다.AppConfig는 스프링 컨테이너의 구성 정보를 설정하는 설정 파일이다.스프링 컨테이너 생성 과정구성 정보(AppConfig)를 참고하여 스프링 컨테이너 내에 있는 스프링 빈 저장소에 빈을 등록한다.@Bean이 붙은 메소드명이 빈 이름, 리턴하는 객체의 참조값이 빈 객체로 등록된다.스프링 컨테이너는 설정 정보(AppConfig.class)를 참고해서 의존관계를 주입(DI)을 한다.스프링 빈 조회스프링 빈은 스프링 내부에서 사용하는 빈과 개발자가 정..
[스프링 핵심 원리] 객체 지향 원칙(SOILD) 적용 - 설정 클래스(AppConfig) 사용
·
Back-end/Spring
김영한 강사의 스프링 핵심 원리 기본편 1~3강 핵심 내용만 정리한 글 입니다.💡 객체 지향 설계의 5가지 원칙 (SOLID)SRP: 단일 책임 원칙(single responsibility principle)한 클래스는 하나의 책임만 가져야 한다. 즉, 변경이 있을 때 파급 효과가 가장 적을 수 있게 클래스를 쪼개는 것이다.OCP: 개방-폐쇄 원칙 (Open/closed principle)확장에는 열려 있고 변경에는 닫혀 있어야 한다.코드를 추가하는 것은 가능하지만, 코드를 변경하는 것은 불가능하다는 뜻이다.기존의 MemoryMemberRepository 객체를 JdbcMemberRepository 객체로 변경하려면 클라이언트 코드를 변경해야 한다. 하지만 이렇게 변경하면 OCP를 위반하게 된다.LSP..
[JAVA] 제네릭
·
Programming Language/자바(JAVA)
제네릭결정되지 않은 타입을 파라미터로 처리하고 실제 사용할 때 파라미터를 구체적인 타입으로 대체시키는 기능아래와 같이 Box 클래스를 선언하려고 하는데 필드의 타입을 무엇으로 할지 결정되지 않은 경우 모든 클래스의 조상인 Object 타입으로 선언할 수 있다.이렇게 하면 강제 타입 변환을 통해 어떤 객체든 대입될 수 있다.해당 필드를 얻을 때 어떤 타입인지 알 수 없으므로 강제 타입 변환을 통해 얻어야 한다.하지만 모든 클래스를 대상으로 조사해서 얻는 것은 불가능하기 때문에 Object 타입을 이용하는 것은 적절하지 않다.public class Box { public ? content;}이런 경우 사용하는 것이 제네릭이다. 아래 예시로 보자선언부에 부모를 붙이고 그 안에 타입 파라미터를 위치한다.:..