💡정의
①엔터프라이즈용 Java 애플리케이션 개발을 위한 ②오픈 소스 ③경량급 ④애플리케이션 프레임워크로, 동적인 웹 사이트를 개발하기 위한 여러 가지 서비스를 제공
①엔터프라이즈용 Java 애플리케이션 개발
비즈니스 로직을 쉽게 구현할 수 있게 함
*비즈니스 로직: 기업이 제공하는 서비스에서 사용자의 요구사항을 해결하기 위한 실질적인 코드
②오픈 소스
개인 및 기업이 무료로 사용할 수 있음
③경량급(코드의 복잡성↓)
기존 기술을 사용할 때에 불가피하게 작성했던, 불필요하게 복잡한 코드를 제거하게 됨
④애플리케이션 프레임워크
프레임워크: 어떠한 목적을 쉽게 달성할 수 있도록 해당 목적과 관련된 코드의 뼈대를 미리 만들어둔 것
애플리케이션 프레임워크: 애플리케이션을 개발하는 데에 필요한 모든 업무 분야 및 기술과 관련된 코드의 뼈대를 제공
💡특징
- POJO(Plain Old Java Object)
- IoC(Inversion of Control)
- DI(Dependency Injection)
- AOP(Aspect Oriented Programming)
- PSA (Portable Service Abstraction)
1. POJO(Plain Old Java Object)
POJO 정의
- 외부의 라이브러리나 모듈을 사용하지 않고 순수 Java 및 Java의 스펙에 정의된 기술만 사용하여 생성한 객체
- 프레임워크 인터페이스나 클래스를 구현 및 확장하지 않은 단순 클래스
- Spring에서는 도메인과 비즈니스 로직을 수행하는 대상이 POJO 대상이 될 수 있음
POJO가 중요한 이유?
- 외부 기술이나 규약의 변화에 얽매이지 않아, 보다 유연하게 변화와 확장에 대처할 수 있음
- 객체지향 설계를 제한없이 적용할 수 있음
- 코드가 간결해져 테스트와 디버깅이 쉬워짐
2. IoC(Inversion of Control)
IoC 정의
- 제어의 역전
- 객체의 생성부터 호출, 생명주기의 관리까지 모든 객체에 대한 제어권이 개발자가 아닌 프레임워크에게 있는 것
2024.05.06 - [Java/Spring] - [Spring(스프링)] Bean(빈), 생명 주기, Scope(스코프)
- 개발자는 프레임워크에 필요한 부품을 개발하고 조립하는 방식으로 개발, 최종 호출은 개발자가 아니라 프레임워크의 내부에서 결정된 대로 이뤄짐
3. DI(Dependency Injection)
DI 정의
- 의존성 주입
- 객체를 직접 생성하는 것이 아니라 외부에서 생성한 후 주입 시켜주는 것
- 스프링 프레임워크에서 지원하는 IoC의 형태
- 클래스 사이의 의존관계를 빈 설정 정보를 바탕으로 컨테이너가 자동으로 연결
DI 장단점
- 장점
- 스프링 자체에서 설정을 통해 연관 관계를 맺어줌으로써 객체간 결합도를 낮춰줌
- 클래스의 재사용성을 높이고, 유지보수가 편리해짐
- 단점
- 의존성 주입을 위한 선행 작업이 필요해 간단한 프로그램에서는 번거로움
- 코드 추적이 어려움
주입 방식
- 수정자 주입
- 대부분 의존 관계 주입은 한번 일어나면 종료시점까지 변경할 일이 거의 없음
- Setter를 통해 주입하게 되면 변경될 위험이 존재
- Setter를 public으로 열어야 함
- 필드 주입
- 외부에서 변경이 불가능해서 테스트하기 어려움
- 생성자 주입
- 생성자 주입을 권장
- 생성자 호출 시점에 딱 1번만 호출되는 것을 보장
- final 키워드를 통해 불변하게 설계 가능
- 의존성 주입이 누락되는 것을 방지할 수 있음(IDE에서 컴파일 오류로 알려줌)
4. AOP(Aspect Oriented Programming)
2024.05.09 - [Java/Spring] - [Spring(스프링)] AOP(관점 지향 프로그래밍)
AOP 정의
- 관점 지향 프로그래밍
- 어떤 로직을 기준으로 공통 관심 사항과 핵심 관심 사항을 분리하여 모듈화
- 여러 번 반복해서 사용하는 코드(흩어진 관심사)를 Aspect로 모듈화하여 핵심 로직에서 분리해 재사용
특징
- 재사용성 향상
- 여러 객체에 공통으로 적용할 수 있는 기능을 구분함으로써 재사용성을 향상시킴
- 비즈니스 로직 앞/뒤에 공통 관심 사항을 수행해 중복 코드를 줄임
- 특정 로직(로그, 성능테스트, 권한)을 모든 메서드에 적용하고 싶을 때, 일일이 추가하는 것이 아니라 로직을 만들어서 적용
5. PSA (Portable Service Abstraction)
정의
- 하나의 추상화로 여러 서비스를 묶어둔 것
- 환경의 변화와 관계없이 일관된 방식으로 기술에 접근할 수 있는 환경을 제공하려는 추상화 구조
'Java > Spring Framework' 카테고리의 다른 글
[Spring(스프링)] MVC 패턴 (0) | 2024.05.12 |
---|---|
[Spring(스프링)] Transactional(트랜잭셔널) (0) | 2024.05.09 |
[Spring(스프링)] AOP(관점 지향 프로그래밍) (0) | 2024.05.09 |
[Spring(스프링)] Bean(빈), 생명 주기, Scope(스코프) (0) | 2024.05.06 |
[Spring(스프링)] Spring Container(스프링 컨테이너) (0) | 2024.05.06 |