💬 IoC(Inversion of Control, 제어의 역전)
💡 프로그램의 제어 흐름을 개발자가 아닌 프레임워크가 관리하는 디자인 원칙
- 기존 방식
- 객체 생성 → 의존성 객체 생성 → 의존성 객체 메소드 호출
- 스프링
- 객체 생성 → 의존성 객체 (스프링이 만들어 놓은 객체) 주입 → 의존성 객체 메소드 호출
❔ IoC의 장점
- 유연성 증가
- 클래스 간 결합도 낮아짐
- 유지 보수 용이
- 코드 변경 시 적은 부분만 변경할 수 있음
💬 Bean
💡 Spring IoC 컨테이너가 관리하는 객체. (생성•초기화•보관•제공)
❔ Bean의 주요 특징
- 관리의 자동화
- 싱글턴 패턴
- 어플리케이션 내에서 해당 Bean에 대한 요청이 있을 때마다 동일한 객체 인스턴스가 반환됨
- 필요에 따라 프로토타입 등의 다른 스코프 설정 가능
- 의존성 주입(DI)
- 의존성을 자동으로 주입받으며, 설정 파일 및 어노테이션 등을 통해 구성이 가능하다.
❔ Bean 정의 방법
- XML 파일을 통해 등록
- Java Config 클래스를 이용해 등록 : @Configuration과 @Bean을 사용하여 등록 = 외부 객체
- 애노테이션을 이용한 Bean 등록 : @Component, @Service, @Controller, @Repository 등을 사용해 Bean을 정의하고, @ComponentScan으로 Bean을 스캔 = 자신이 만든 객체
✅ @SpringBootApplication 사용 시의 스캔
- @SpringBooTApplication 어노테이션이 붙은 클래스가 자동으로 컴포넌트를 스캔
- @SpringBootApplication은 기본적으로 현재 클래스가 위치한 패키지•하위 패키지를 스캔
💬 DI(Dependency Injection, 의존성 주입)
💡 객체가 사용할 의존 객체를 외부에서 만들어 주입받는 방식
❔사용 목적
- 유연성 및 유지보수성 확보
- 의존도 감소
- 테스트 용이성 확보
❔구현 방식
1️⃣ 생성자 주입(Constructor Injection) :
// 의존성 클래스
class Service {
public void serve() {
System.out.println("Service is serving...");
}
}
// 클라이언트 클래스
class Client {
private final Service service;
// 생성자를 통해 의존성 주입
public Client(Service service) {
this.service = service;
}
public void execute() {
service.serve();
}
}
public class Main {
public static void main(String[] args) {
Service service = new Service();
Client client = new Client(service); // 생성자를 통해 의존성 주입
client.execute();
}
}
2️⃣ 세터 주입(Setter Injection)
// 의존성 클래스
class Service {
public void serve() {
System.out.println("Service is serving...");
}
}
// 클라이언트 클래스
class Client {
private Service service;
// 세터 메서드를 통해 의존성 주입
public void setService(Service service) {
this.service = service;
}
public void execute() {
service.serve();
}
}
// 메인 클래스
public class Main {
public static void main(String[] args) {
Service service = new Service();
Client client = new Client();
client.setService(service); // 세터 메서드를 통해 의존성 주입
client.execute();
}
}
3️⃣ 필드 주입(Field Injection) : 비추천
@Service
public class Service {
@Autowired
private Serviceone serviceone;
....
'🏕 멋사 Java 백엔드 13기 > TIL' 카테고리의 다른 글
250205 TIL | 람다식 (1) | 2025.02.05 |
---|---|
250121 TIL | AOP (2) | 2025.01.21 |
[멋쟁이사자처럼 부트캠프 TIL 회고] 241231 백엔드 Java 부트캠프 21일차 (2) | 2024.12.31 |
[멋쟁이사자처럼 부트캠프 TIL 회고] 백엔드 Java 부트캠프 12일차 | DB (2) | 2024.12.17 |
[멋쟁이사자처럼 부트캠프 TIL 회고] 백엔드 Java 부트캠프 11일차 | DB (1) | 2024.12.16 |