[객체지향 프로그래밍 입문] 의존과 DI

sameul__choi·2022년 2월 2일
0

의존

  • 기능 구현을 위해 다른 구성 요소를 사용하는 것
    - 의존의 예 : 객체 생성, 메서드 호출, 데이터 사용
  • 의존은 변경이 전파될 가능성을 의미
    - 의존하는 대상이 바뀌면 바뀔 가능성이 높아짐
    • 예 : 호출하는 메서드의 파라미터가 변경
    • 예 : 호출하는 메서드가 발생할 수 있는 익셉션 타입이 추가

순환 의존

  • 순환의존 - > 변경 연쇄 전파 가능성
    - 클래스, 패키지, 모듈 등 모든 수준에서 순환 의존 없도록

의존하는 대상이 많다면 ?

  • A~F까지 의존하는 대상이 각자의 이유로 바뀌면 X도 바뀔가능성이 높아진다.
  • 의존하는 대상은 적을 수록 좋다.

의존하는 대상 많을때 (1) : 기능 많은 경우, 분리 고려

  • 한 클래스에서 많은 기능을 제공하는 경우

    - 각 기능마다 의존하는 대상이 다를 수 있음
    - 한 기능 변경이 다른 기능에 영향을 줄 수 있음
    - 예 : changePw 를 변경하는데 blockUser 를 변경 해야하는 경우
    - 예 :regist 를 테스트하려면 blackUser 까지 초기화 해야하는 경우

  • 그럴 때는 기능을 클래스로 분리 고려

  • 클래스 갯수는 증가하지만, 각 클래스마다 필요로하는 의존이 줄어든다

  • 한 기능을 수정할때 다른 기능 수정하지 않아도 된다.

  • 개별 기능 테스트도 수월해진다.

의존 대상 많을 때 (2): 묶어보기

  • 몇가지 의존 대상을 단일 기능으로 묶어서 생각해보면 의존 대상을 줄일 수 있음.

의존 대상 객체를 직접 생성하면 ?

  • 생성 클래스가 바뀌면 의존하는 코드도 바뀜
    - 추상화에서 언급
  • 의존 대상 객체를 직접 생성하지 않는 방법
    - 팩토리, 빌더
    • 의존 주입 (Dependency Ingection)
    • 서비스 로케이터 (Service Locator)

의존 주입 (Dependency Injection)

  • 외부에서 의존 객체를 주입
    - 생성자나 메서드를 이용해서 주입

  • 프로그래밍을 초기화하는 단계에서 알맞은 객체 생성하고 전달.

조립기(Assembler)

  • 조립기가 객체 생성, 의존 주입을 처리
    - 예 : 스프링 프레임워크

  • 객체를 생성 하고 의존대상 주입하는 코드를 설정으로 작성

  • 설정 코드를 이용하여, ApplicationContext라고 불리는 조립기 생성

DI의 장점

  • 상위 타입을 사용할 경우
    - 의존 대상이 바뀌면 조립기(설정)만 변경하면 됨
  • 의존하는 객체 없이 대역 객체를 사용해서 테스트 가능
    - 원하는 대로 상태 초기화 가능
    - DB 없어도 DB 테스트 가능

결론 : DI를 습관처럼 사용하기

  • 의존 객체는 주입받도록 코드 작성하는 습관

0개의 댓글