728x90
반응형

1. 제어 반전, IoC (Inversion of Control)를 지원함. (예시가 DI)
* 컨트롤의 제어권이 개발자가 아니라 프레임워크에 있음
* 객체의 생성부터 모든 생명주기의 관리까지 객체의 제어권이 바뀐 것을 의미합니다.
* 객체를 생성하고, 직접 호출하는 자바프로그램이 아니라, 만들어둔 자원을 프레임워크에서 호출해서 사용함.

2. 의존성 주입, DI (Dependency Injection) 를 지원함. @Autowired 등
* 이는 객체간의 의존관계를 관리하는 기술
* 어떤 객체가 필요로 하는 객체를 자기 자신이 직접 생성하는 것이 아니라, 외부에 있는 다른곳에서 자신이 필요로 하는 객체를 주입받는 것

3. POJO (Plain Old Java Object) 방식의 프레임워크
* 일반적인 J2EE 프레임워크에 비해 특정 라이브러리를 사용할 필요가 없어서 개발이 쉬우며, 기존 라이브러리의 지원이 용이함.

4. PSA (Portable Service Abstraction) 
* 스프링은 다른 여러 모듈을 사용함에 있어서 별도의 추상화 레이어 제공 (slf4j)
* 예를 들어 JPA를 사용할 때에서 Spring JPA를 사용하여 추상화 하므로 실제 구현에 있어서 Hibernate를 사용하든 EclipseLink를 사용하든 사용자는 이 모듈의 의존 없이 프로그램에 집중가능.

5. 관점지향프로그래밍, AOP(Aspect Oriented Programming)를 지원함.

   (OOP를 극강의 OOP로 만든게 AOP => 완전 OOP임)
* 실제 비즈니스 로직과 공통적으로 처리할 로직을 분리해놨다가 필요한때에 적시적기에 사용할 수 있도록 하는것
* 트랜잭션, 로깅, 보안 등 여러 모듈, 여러 계층에서 적용되는데, 이런 코드들을 실제 비지니스 로직과 분리
* 한때, AOP가 OOP(Object Oriented Programming)를 대체하는 기술로 생각되기도 했지만, 실제로 AOP는 OOP를 더욱 OOP스럽게 보완해 주는 기술임.

반응형
복사했습니다!