-
spring 제어의 역전 (Ioc)Spring Framework 2023. 8. 11. 20:53
IOC - 제어의 역전
- 객체를 외부에서 제어해 변수의 값에 변경이 자유로워졌다.
- 객체의 제어권을 객체 내부로부터 분리시킨다.
- 객체지향의 장점을 극대화
- 값의 변경에 따른 유연한 코드 작성
- 응집도를 높이고 결합도를 낮추며 변경에 유연한 코드를 작성할 수 있는 구조로 만든다.
예시
public class Ex { SubEx subEx; // 내부에서 직접 관리 (제어권이 객체 내부에 존재) : 변수를 내부에서 직접 초기화 public Ex() { this.subEx = new SubEx(); } // 변수를 받아 간접적으로 관리 (제어의 역전) : 외부로부터 인자를 받아 초기화 : 외부에서 관리한다. SubEx1 subEx1; SubEx2 subEx2; public Ex(SubEx1 subEx1, SubEx2 subEx2) { this.subEx1 = subEx1; this.subEx2 = subEx2; } /* * 객체를 외부에서 제어해 변수의 값에 변경이 자유로워졌다. 요구사항이 변경이 되면 직접 제어는 계속 변경을 해줘야한다. 간접제어는 그런 개념이 아니다. 큰 인터페이스를 상속 받아 변수의 값에 상관없이 인자를 받아 값을 재할당 시켜준다. 객체의 제어권을 객체 내부로부터 분리시킨다. - 객체지향의 장점을 극대화 - 값의 변경에 따른 유연한 코드 작성 응집도를 높이고 결합도를 낮추며 변경에 유연한 코드를 작성할 수 있는 구조로 만든다. */ }DIP - 의존 역전
- 저수준이든 고수준이든 모든 모듈들은 추상화에 의존한다.
- 객체가 객체 종류에 의존하지 않고 인터페이스에 의존하면서 변경에 대해 자유로워졌다.
- 지속 가능하고 확장성 있는 개발에서 중요하다.
예시
// DIP가 적용되지 않는 코드 - 고수준이 저수준에 영향을 받음 public class JavaBook { HardCase hardCase; public JavaBook(HardCase hardCase) { this.hardCase = hardCase; } } // DIP가 적용된 코드 - 고수준이 인터페이스에 의존 public class JavaBook { Case case; public JavaBook(Case case) { this.case = case; } } /* 자바 책이 고수준 모듈이었는데, 저수준 모듈인 하드표지에 의존하지 않는다. 표지라는 인터페이스에 의존하면서 저수준 모듈이 변화해도 고수준 모듈인 자바 책은 영향이 없다. */- 자바 책이 고수준 모듈이었는데, 저수준 모듈인 하드표지에 의존하지 않는다.
- 표지라는 인터페이스에 의존하면서 저수준 모듈이 변화해도 고수준 모듈인 자바 책은 영향이 없다.
'Spring Framework' 카테고리의 다른 글
spring MVC & servlet 정리 (0) 2023.08.13 spring 의존성 주입(DI) (0) 2023.08.11 json 파라미터 xss필터 처리 (request, response) (0) 2023.08.11 DAO & DTO & Entity 비교 (POJO, BO 간단한 설명) (0) 2023.08.11 Spring에서 CORS ERROR 설정 (0) 2023.08.11