일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- SpringSecurity 로그인
- 자바의정석
- 연산자
- 친절한 SQL
- join
- SQL 튜닝
- 이클립스 설치
- 스프링시큐리티 로그아웃
- 오버로딩
- StringBuffer
- 친절한 SQL 튜닝
- 객체지향
- SQL튜닝
- 비교 연산자
- 함수
- 객체
- 오버라이딩
- 인텔리제이 Web 애플리케이션
- @PreAuthorize("isAuthenticated()")
- 논리 연산자
- 식별자
- 반복문
- SpringSecurity 로그아웃
- SQL
- java
- 산술 연산자
- 예약어
- 배열
- spring 게시판 삭제
- 상속
Archives
- Today
- Total
gi_dor
ioC , DI 본문
728x90
IoC
‘제어역전’ 또는 ‘역전 제어’ , '의존성 역전'
프로그램의 흐름을 개발자가아닌 프레임워크가 관리한다
객체의 생성과 생명주기 관리를 프레임워크가 담당하므로 개발자는 비즈니스 로직에 집중 할 수 있게된다
스프링에서 애플리케이션 컨텍스트 Application Context 가 이런 역할을 담당한다
빈Bean 이라고 하는 객체들의 생성 , 설정 , 관리를 담당
자신이 사용할 메서드나 객체의 호출 작업을 개발자가 결정하지 않고 외부에서 결정 되는 것을 의미
다른객체를 직접 생성하거나 , 제어하는것이 아닌 , 외부에서 관리하는 객체를 가져와 사용하는것
객체 간의 의존성을 낮추기 위해, 객체가 직접 자신이 필요로 하는 의존 객체를 생성하지 않고, 외부에서 생성하여 주입하는 방식을 IoC라고 한다
기존
- 객체생성
- 의존성 객체 생성 - 클래스 내부에 생성
- 의존성 객체 메서드 호출
public class A {
b = new B(); // 클래스 A에서 new 키워드로 클래스 B의 객체 생성
}
스프링에서는
- 객체생성
- 의존성 객체 주입 - 스스로 만들지 않고 스프링에게 위임하여 스프링이 만들어놓은 객체를 주입
- 의존성 객체 메서드 호출
public class A {
private B b; // 어디선가 받아온 객체를 b에 할당
}
스프링이 모든 의존성 객체를 스프링이 만들어주고 필요한 곳에 주입시켜 줌으로써 Bean 들은 싱글톤 패턴의 특징을 가지며 제어의 흐름을 사용자가 컨트롤하는 것이 아닌 , 스프링에게 맡겨 작업을 처리한다
DI
의존성 주입 (DI: Dependency Injection)
객체가 직접 의존하는 객체를 생성하지 않고, 외부에서 의존 객체를 주입하는 방식을 의존성 주입이라고 합니다.
- 제어의 역전을 구현하기 위해 사용하는 방법
- 자신이 사용할 객체를 자신이 직접 생성하지 않고, 외부 모듈이 조립해주는 객체를 사용하는 것
- 객체 사이의 의존관계를 스프링 설정 파일에 등록된 정보를 바탕으로 컨테이너가 자동으로 처리해준다
- @Autowired 어노테이션을 통해 의존성 주입을 쉽게 구현할 수 있다
결합도를 낮추고 코드의 유연성을 높일수 있다
public class A {
// A에서 B를 주입받음
@Autowired
B b;
}
DI를 사용하는 이유
- 자신이 사용할 객체(의존하는 객체)를 직접 생성하지 않고, 외부에서 생성한 후 주입을 시켜주는 방식
- 다른 객체로 쉽게 교체할 수 있다는 것은 애플리케이션의 확장성을 높이는 것
애플리케이션의 확장성을 높이는 방법
- 자신이 사용할 객체를 자신이 결정하지 않는다.
- 인터페이스를 이용한 느슨한 결합을 유도한다.
- 의존성 주입을 통해서 외부모듈로부터 자신이 사용할 객체를 주입받는다.
스프링의 @Component , @Service , @Repository 등의 어노테이션은 특정클래스를 스프링 빈으로
등록하는데 사용된다 , 이런 빈들은 스프링 컨테이너에 의해 관리되며 필요한 의존성이 자동으로 주입된다
728x90
'Back_End > Spring' 카테고리의 다른 글
Spring MVC , Controller (1) | 2024.03.12 |
---|---|
MyBatis (4) | 2024.03.12 |
Spring AOP (0) | 2024.03.12 |
빌드도구 Maven (0) | 2024.03.11 |
Spring Framework (0) | 2024.03.11 |