ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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;
        }
    }
    
    /*
    자바 책이 고수준 모듈이었는데, 저수준 모듈인 하드표지에 의존하지 않는다.
    
    표지라는 인터페이스에 의존하면서 저수준 모듈이 변화해도 고수준 모듈인 자바 책은 영향이 없다.
    */

    - 자바 책이 고수준 모듈이었는데, 저수준 모듈인 하드표지에 의존하지 않는다.

    - 표지라는 인터페이스에 의존하면서 저수준 모듈이 변화해도 고수준 모듈인 자바 책은 영향이 없다.

Designed by Tistory.