개발 무지렁이

[Spring] Spring의 설계 철학과 느슨한 결합을 만들어주는 Spring Container의 DI와 인터페이스 지향 본문

Backend/스프링

[Spring] Spring의 설계 철학과 느슨한 결합을 만들어주는 Spring Container의 DI와 인터페이스 지향

Gaejirang-e 2023. 9. 19. 10:38

🌱 Spring의 설계 철학
: 개발자가 Spring Framework종속되지 않고 POJO 객체를 사용하여 애플리케이션을 개발할 수 있게 하는 것

🍩 POJO를 이용한 가볍고, 비침투적인 개발
🍩 DI인터페이스 지향을 통한 느슨한 결합도 (다른 구현체로 교체하기 쉽다.)
🍩 Aspect공통규약을 통한 선언적 프로그래밍
🍩 Aspect템플릿을 통한 상투적인 코드 축소

❓선언적 프로그래밍
: 무엇을 달성해야 하는지에 대해 명시적 설명
어떻게 달성하는지에 대한 세부사항은 숨겨져 있다.

𐂂 POJO (Plain-Old Java Object)
특별한 제약이나 규칙을 따르지 않는 평범한 자바객체를 가리킨다.
Spring FrameworkSpring에 특화된 클래스를 요구하지 않으며, 기본은 POJO다.
Spring Framework의존성 주입을 통해 POJO 객체를 연결할 수 있는 강력한 매커니즘을 제공한다.

𐁍 Spring Container
🪛 설정정보를 바탕으로 객체생성하고,
생성된 객체내부에 담아,
라이프사이클 관리의존성주입을 담당하는
컴포넌트를 말한다.

🪹 Spring Container는 크게 두가지 유형으로 나뉜다.
🍟 BeanFactory
🍟 ApplicationContext

⚠️ BeanFactory확장한 것이 ApplicationContext다.

𖠃 BeanFactory
🥚Bean 객체생성하고 제공하는 역할을 한다.

🍩 Bean Definition:
어떤 클래스의 객체생성할지, 어떤 속성값주입할지, 각 Bean에 대한 메타데이터를 말한다.

🍩 Lazy Initialization:
Bean 객체를 게으르게 초기화한다. (Bean 객체실제로 필요한 시점에서 초기화된다.)

🍩 Singleton Scope:
생성된 Bean 객체는 애플리케이션 내에서 공유되어 재사용된다.

🍩 Dependency Injection:
Bean 객체가 다른 Bean 객체를 필요로할 때, Spring Container가 이 의존성을 자동으로 처리한다.

🍩 Aspect-Oriented Programming:
BeanFactory를 통해 AOP 기능을 지원하며, 공통 관심사항을 분리하여 모듈화할 수 있다.

𖠃 ApplicationContext 인터페이스
스프링 애플리케이션🪛설정정보를 읽고 객체를 관리하는 역할을 한다.

ApplicationContext의 구현체

📦 ClassPathXmlApplicationContext
: ClassPath에 지정한 경로에서 xml파일을 읽어 context 정의내용을 로드

📦 FileSystemXmlAPPlicationContext
: 파일시스템에 지정한 경로에서 xml파일을 읽어 context 정의내용을 로드

📦 XmlWebApplicationContext
: 웹 애플리케이션에 포함된 xml파일에서 context 정의내용을 로드
Comments