일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 제너릭메서드
- staging_area
- API
- 스프링
- 프로그래머스
- 스레드동기화
- string메서드
- SQ3R
- 4A피드백
- 루트사용자
- 코딩테스트
- openapi
- 향상된for문
- 참조변수타입변환
- Java
- 배열탐색
- 성장형마인드셋
- API명세서
- 파일사용권한
- 네이티브애플리케이션
- 백준
- SQL
- 자바
- 재귀적사고
- 동전교환알고리즘
- 날씨API
- ChatGPT
- Spring
- 99클럽
- 프로젝트
- Today
- Total
개발 공부용
Spring - IoC, DI, AOP 본문
IoC(Inversion of Control): 제어의 역전
객체를 직접 생성하거나 제어하는 것이 아니라 외부에서 관리하는 객체를 가져와 사용하는 것.
객체의 관리를 컨테이너에 맡겨 제어권이 넘어간 것을 제어의 역전이라고 함.
#class A에서 new 키워드로 class B의 객체 직접 생성
public class A {
b = new B();
}
#외부에서 관리하는 객체 사용(스프링 컨테이너가 객체를 관리, 외부 == 스프링 컨테이너/IoC 컨테이너)
public class A {
private B b;
}
DI(Dependency Injection): 의존성 주입
제어의 역전을 구현하기 위해 사용하는 방법이 DI이다.
DI에는 3가지 방법이 있다.
- 생성자를 통한 DI(권장)
- 필드 객체 선언을 통한 DI
- setter 메서드를 통한 DI
#직접 객체를 생성하지 않고 주입받고 있음
#(스프링 컨테이너가 B객체를 만들어서 클래스 A에 주었음)
public class A {
@Autowired
B b;
}
@Autowired: 스프링 컨테이너에 있는 빈을 주입하는 애너테이션
빈(Bean)이란?
- 빈 == 스프링 컨테이너에서 관리하는 객체
- 빈을 스프링 컨테이너에서 등록하기 위해선 XML 파일에서 설정하거나 애너테이션으로 등록하는 등의 방법이 있다.
- @Component: 가장 일반적인 빈으로 등록하는 애너테이션
- @Service: 비즈니스 로직을 담는 서비스 레이어 빈 정의
- @Repository: 데이터 접근 계층에 사용되는 빈 정의
- @Controller: 웹 요청을 처리하는 컨트롤러 빈 정의
- @Configuration: 구성 클래스를 나타내는 빈 정의
- 이후 스프링 컨테이너에서 해당 클래스를 관리한다.
- 빈의 이름은 클래스 이름의 첫 글자를 소문자로 바꿔 관리. (e.g MyBean -> myBean)
@Component
public class MyBean {
AOP(Aspect Oriented Programming): 관점 지향 프로그래밍
관점을 기준으로 묶어 개발하는 방식
-> 기능을 핵심 기능과 부가 기능으로 구분해 각각을 나누어서 보는 것을 의미
- 핵심 기능: 비즈니스 로직이 처리하려는 목적 기능
- 부가 기능: 비즈니스 로직 사이에 로깅 처리를 하거나 트랜잭션 처리를 하는 코드, 데이터 베이스 연결 등
상품 정보 등록을 요청 받아 DB에 저장하고 조회하는 기능을 구현한다고 하면
- 핵심 기능: 상품 정보 저장, 상품 정보 조회
- 부가 기능: 트랜잭션, DB 연결, 로깅 등
각 핵심 기능은 동일한 부가 기능을 수행할 확률이 높다.
AOP에서는 핵심 기능이 어떤 기능인지와 무관하게 핵심 기능의 수행 전 또는 후에 부가 기능 로직이 수행되기만 하면 된다.
여러 비즈니스 로직에서 반복되는 부가 기능을 하나의 공통 로직으로 처리하도록 모듈화하여 삽입하는 것을 AOP라고 한다.
참고 자료 |
https://shinsunyoung.tistory.com/133
스프링 부트 핵심 가이드
'Java|Spring' 카테고리의 다른 글
[JAVA] 가변 인자 (0) | 2025.05.16 |
---|---|
Spring - Test, AssertJ, TDD (0) | 2025.04.03 |
Spring - ORM, JPA, 커넥션 풀 (0) | 2025.04.01 |
Spring - Websocket, Simple Broker, External Broker (0) | 2025.03.28 |
Spring - 웹소켓과 STOMP (0) | 2025.03.27 |