Spring 15

[Spring] 컴포넌트 스캔과 의존관계 자동 주입(생성자 주입을 해야하는 이유)

1. @ComponentScan 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공한다. @ComponentScan은 @Component가 붙은 모든 클래스를 스프링 빈으로 등록한다. 이때 스프링 빈의 기본 이름은 클래스명을 사용하되 맨 앞글자만 소문자를 사용한다. ex) MemberServic.class -> memberService 빈 이름을 지정하고 싶으면 @Componnent("member")이런 식으로 이름을 부여하면 된다. 컴포넌트 스캔 기본 대상 컴포넌트 스캔은 @Component 뿐만 아니라 다음의 내용도 추가로 대상에 포함한다. 컴포넌트 스캔의 용도 뿐만 아니라 다음 애노테이션이 잇으면 스프링은 부가 기능을 수행한다. @Component : 컴포넌트..

Spring 2023.01.29

[Spring] 싱글톤 컨테이너

1. 웹 애플리케이션과 싱글톤 스프링은 기업용 온라인 서비스 기술을 지원하기 위해 탄생했다. 웹 애플리케이션은 보통 여러 고객이 동시에 요청한다. 고객이 요청할 때마다 객체를 새로 생성한다면 메모리 낭비가 심하다. 해결 방안은 객체가 딱 1개만 생성되고, 공유하도록 설계하면 된다. -> 싱글톤 패턴 JAVA의 싱글톤 패턴 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴이다. private 생성자를 사용해서 외부에서 임의로 new 키워드를 사용하지 못하도록 막는다. public class SingletonTest { //1. static 영역에 객체를 딱 1개만 생성해둔다. private static final SingletonTest instance = new SingletonTest(..

Spring 2023.01.29

[Spring] 스프링 컨테이너 (BeanFactory & ApplicationContext & BeanDefinition)

1. BeanFactory 스프링에서 제공하는 IoC 컨테이너 스프링 컨테이너의 최상위 인터페이스이다. 스프링빈을 관리, 조회한다. getBean()을 제공한다 2. ApplicationContext BeanFactory기능을 모두 상속받아서 제공 빈을 관리하고 검색하는 기능 외에 수 많은 부가기능을 제공한다. 메시지소스를 활용한 국제화 기능 -> ex) 한국에서 들어오면 한국어로, 영어권에서 들어오면 영어로 출력 환경변수 -> 로컬,개발,운영등을 구분해서 처리 애플리케이션 이벤트 -> 이벤트를 발행하고 구독하는 모델을 편리하게 지원 편리한 리소스 조회 -> 파일, 클래스패스, 외부 등에서 리소스를 편리하게 조회 빈 요청시 처리 과정 클라이언트에서 bean을 요청하면 ApplicationContext는 ..

Spring 2023.01.29

[Spring] IoC, DI, 그리고 컨테이너

1. IoC (Inversion of Control 제어의 역전) 프로그램의 제어 흐름을 직접 제어하는 것이 아니라 외부에서 관리하는 것을 제어의 역전이라 한다. "프레임워크 vs 라이브러리" 프레임워크가 내가 작성한 코드를 제어하고, 대신 실행하면 그것은 프레임워크가 맞다. 반면 내가 작성한 코드가 직접 제어의 흐름을 담당한다면 그것은 라이브러리이다. 2. 의존관계 주입 DI (Dependency injection) 의존관계는 정적인 클래스 의존관계와, 실행 시점에 결정되는 동적인 객체(인스턴스) 의존 관계 둘을 분리해서 생각해야 한다. 정적인 클래스 의존관계 애플리케이션을 실행하지 않아도 분석할 수 있다. 클래스가 사용하는 import 코드만 보고 의존관계를 쉽게 판단할 수 있다. 동적인 객체 의존관..

Spring 2023.01.29

[Spring] 객체지향 설계의 5가지 원칙(SOLID)

0. 스프링이란? 자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크 1. 객체지향 설계의 5가지 원칙(SOLID) SRP : 단일책임원칙 (single responsibility principle) OCP : 개방-폐쇄 원칙 (Open/closed principle) LSP : 리스코프 치환 (Liskov substitution principle) ISP : 인터페이스 분리 원칙 (Interface segregation principle) DIP : 의존관계 역전 원칙 (Dependency inversion principle) SRP 단일책임원칙 한 클래스는 하나의 책임만 가져야 한다. 하나의 책임이라는 것은 모호하다. (클 수 있고, 작을 수 있다. 문맥과 상황에 따라 다르다.) 중요한 기준은 변경이..

Spring 2023.01.29