본문 바로가기

웹/Back-end

[Spring] 스프링의 주요 특징 - POJO, 의존성주입, AOP

POJO(Plain Old Java Object) 기반의 구성

스프링 내부에는 객체 간의 관계를 구성할 수 있는 특징이 있는데

다른 프레임워크들과 달리 이 관계를 구성할 때 별도의 API 등을 사용하지 않는 POJO 구성만으로 가능하도록 제작되어 있다. 쉽게 말해, 일반적인 Java 코드를 이용해서 객체를 구성하는 방식을 그대로 스프링에서 사용할 수 있다는 얘기.

 

의존성주입(DI: Dependency Injection)

의존성(Dependency)란, 하나의 객체가 다른 객체가 다른 객체없이 제대로 된 역할을 할 수 없다는 것을 의미.

하나의 객체가 다른 객체의 상태에 따라 영향을 받는다.

A 객체가 B객체 없이 동작이 불가능한 상황을 'A가 B에 의존적이다'라고 표현한다.

 

주입(Injection)이란, 외부에서 밀어넣는 것을 의미한다.

예를 들어, 음식점이 식재료를 구할 때 

어떤 음식점의 경우는 매일 가게를 열기 전 시장을 가서 능동적으로 식재료를 구하지만

프랜차이즈의 경우 본사가 트럭 등을 통해 식재료를 공급해다 준다.

후자의 경우가 주입이 되겠다.

 

이처럼 어떤 객체가 필요한 객체를 외부에서 밀어 넣는 것'의존성 주입'이다. 

즉, 객체를 직접 생성하는 것이 아니라 외부에서 생성 후 주입하는 것.

 

출처: https://sidongmen.tistory.com/55

 

직접 식재료를 사지 않고, 외부에서 배송되는 재료를 사용하는 경우, 편리하고 장사에 좀 더 집중하기 쉽다는 장점이 있듯이,

코드 작성 시에도, '주입을 받는 입장에서는 어떤 객체인 지 신경쓸 필요가 없다', '어떤 객체에 의존하든 자신의 역할은 변함이 없다'와 같은 장점을 가지게 된다. 

 

의존성 주입의 장점

  1. 재사용성을 높여준다.
  2. 테스트에 용이.
  3. 코드를 단순화 시켜준다.
  4. 종속적이던 코드의 수도 줄여준다.
  5. 왜 사용하는 지 파악하기가 수월하다. 코드를 읽기 쉬워짐.
  6. 종속성이 감소한다. 구성 요소의 종속성이 감소하면, 변경에 민감하지 않다.
  7. 결합도(coupling)는 낮추면서 유연성과 확장성은 향상시킬 수 있다.
  8. 객체간의 의존관계를 설정할 수 있다.
  9. 객체간의 의존관계를 없애거나 줄일 수 있다.

 

스프링에서는 ApplicationContext라는 존재가 필요한 객체들을 생성하고 필요한 객체들을 주입하는 역할을 해주는 구조이다. 따라서 객체와 객체를 분리해서 생성하고, 이러한 객체들을 엮는 wiring 작업을 하는 형태의 개발을 하게 해준다.

ApplicationContext가 관리하는 객체들을 빈(Bean)이라는 용어로 부르고, 빈과 빈 사이의 의존관계를 처리하는 방식으로 XML 설정, 어노테이션 설정, Java 설정 방식을 이용할 수 있다.

 

 

 

AOP (Aspect Oriented Programming) 지원

대부분의 시스템이 공통적으로 가지고 있는 보안이나 로그, 트랜잭션과 같이 비즈니스 로직은 아니지만,

반드시 처리가 필요한 부분, 여러 곳에서 쓰이는 공통 기능 등을 스프링에서는 '횡단 관심사(Cross-concern)'라고 한다. 

이러한 횡당 관심사를 모듈로 분리하는 프로그래밍의 패러다임이 AOP이다.

즉, 횡당 관심사를 모듈화하고(Aspect, 모듈화된 횡단관심사

핵심적인 비즈니스 로직에서 분리하여 필요할 때 연결, 재사용할 수 있게 하는 것이 AOP의 취지이다.

 

 

AOP 지원의 장점은,

1) 개발자가 핵심 비즈니스 로직에만 집중해서 코드를 개발할 수 있고

2) 각 프로젝트마다 다른 관심사를 적용할 때 코드의 수정을 최소화시킬 수 있으며

3) 원하는 관심사의 유지 보수가 수월한 코드를 구성할 수 있다는 점이다. 


 

참고

https://medium.com/@jang.wangsu/di-dependency-injection-%EC%9D%B4%EB%9E%80-1b12fdefec4f

 

[DI] Dependency Injection 이란?

디펜던시 인젝션, 의존성 주입에 대해 간단하게 작성해 봅니다.

medium.com