** 자기 공부용 및 암기용으로 포스팅하는 글 입니다.
** 정확한 정보는 보장 할 수 없으니, 참고용으로만 봐주시면 감사하겠습니다.
** 제 개인적인 생각 및 자기 암시목적으로 작성되기에 이점 양해 부탁드립니다.
들어가기에 앞서..
Spring Framework의 특징인 POJO.
POJO 프로그래밍을 지향하기 위해 Spring Framework는 IoC/DI, AOP, PSA 기술을 제공한다.
우리는 이번 시간을 통해 각 기술들이 어떠한 것인지 알아보는 시간을 가져보자.
★ 알아볼 내용
1. Spring Framework의 특징 - IoC
2. Spring Framework의 특징 - DI
내용 설명
1. Spring Framework의 특징 - IoC
먼저 IoC는 Inversion of Contorl의 약자이다.
해석하자면은 주도권의 역전이라고 볼 수 있다.
이는 프로그래밍적에서 주도권이 Spring에게 있다라는 의미로 볼 수 있다.
일반저적으로 프로그래밍한다고 가정한다면, 사용자가 Java에서 Main문으로 소스를 시작한다.
우리는 이 시작점을 Entry Point라고 불린다.
그러나 웹에서 동작하는 애플리케이션의 경우 별도의 main() 메서드가 존재하지 않는다.
그 이유로는 웹 애플리케이션의 경우 클라이언트의 요청이 들어올 때 마다, 서블릿 컨테이너 로직이 서블릿을
직접 실행시켜주기 때문이다.
그렇기에 우리는 주도권이 Spring에게 있다라는 의미로 주도권의 역전이라는 IoC라고 표현할 수 있는 것이다.
2. Spring Framework의 특징 - DI
DI는 Dependency Injection의 약자로 의존성 주입이라고 불리운다.
이 개념은 IoC개념을 조금 더 구체화 시킨것이라고 보면 된다.
그렇다면 의존성 주입이라는 것은 무엇이며 왜 사용하는 것인지에 대해 알아보자.
우리는 우선 "의존한다"의 개념에 대해서 알아야 한다.
의존한다라는 것은 아래와 같은 상황일 경우에 사용 할 수있다.
A와 B의 클래스가 존재할 때, A클래스에서 B클래스의 기능을 사용하기 위해 B클래스에 구현되어 있는 어떤 메서드를 호출 하는 상황이다.
이럴 경우 A클래스가 B클래스의 기능을 사용한다면 A클래스는 B클래스에 의존한다 라고 표현할 수 있다.
그렇다면 A클래스에4서 menuService를 new를 통하여 객체를 생성하는 식으로 진행을 할 것이다.
이렇게 되면은 두 사이의 결합도가 높아지게 되는 문제가 발생한다.
우리는 이를 해결하기위해 의존성 주입을 진행한다.
외부에서 생성자를 통하여 매개변수를 보내주는 방식으로 작성하게 되는데
이 방식으로 진행할 경우 menuService로 의 데이터가 변경이 될 경우 외부에서 주는 매개변수 항목 데이터에서만
변경이 이루어 지게 된다면 menuController에서의 소스를 변경할 필요가 없어진다.
아래의 예시 그림에서는 외부는 CafeClient 클래스를 의미한다.
CafeClient 클래스가 menuController의 생성자 파라미터로 menuService를 전달하고
있기 때문에 객체를 주입해주는 외부가 된다.
클래스의 생성자로 객체를 전달받는 코드가 있다면 객체를 외부에서 주입받고 있구나. 의존성 주입이 이루어 지고 있구나 라고 생각하면 된다.
그렇다면 의존성 주입을 왜 사용할까.
new 키워드를 쓸지 말지 여부를 결정 할 수 있다.
실전업무로 들어가게 되면 new 키워드를 사용자가 직접 사용하기 보다는 Spring에서 자체적으로 생성하도록 유도한다.
애플리케이션 코드 내부에서 직접적으로 new 키워를 사용할 경우 객체지향 설계의 관점에서 중요한 문제가 발생할 수 있다.
'Spring 지식 및 공부' 카테고리의 다른 글
[Spring] 아키텍처 ( Architecture ) (0) | 2024.07.04 |
---|---|
[Spring] AOP & PSA (0) | 2024.07.03 |
[Spring] POJO (Plain Old Java Object) (0) | 2024.06.29 |
[Spring] Lombok 사용 방법 및 적용 방법 (0) | 2024.06.19 |
[Spring] 실습 환경 구성 + Spring Boot 2.x 사용방법 (0) | 2024.06.17 |