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

김성혁·2021년 2월 6일
0
post-thumbnail

의존

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

순환 의존

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

의존하는 대상이 많으면?

의존하는 대상은 적을수록 좋다 (내가 바뀔 가능성이 줄어듬)

의존 대상이 많을 때 1, 기능이 많은 경우

  • 한 클래스에서 많은 기능을 제공하는 경우
    • 각 기능마다 의존하는 대상이 다를 수 있음
    • 한 기능 변경이 다른 기능에 영향을 줄 수 있음
  • 기능 별로 분리를 고려

  • 묶어보기 ( 여러 의존 대상을 단일 기능으로 묶어볼 수 있는지 생각해보기

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

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

의존 주입(Dependency Injection)

  • 외부에서 의존 객체를 주입
    • 생성자나 메서드를 이용해서 주입 (생성자와 메서드를 이용해서 객체를 전달하는 것은 초기화 코드에서 진행함. 프로그램을 초기화하는 코드에서 알맞은 객체를 생성하고 전달함)
    • 보통은 조립기를 이용해서 의존 객체를 생성하고 주입함

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

  • DI의 장점

-의존 대상이 바뀌면 조립기(설정)만 변경하면 됨(?)

- 의존하는 객체의 실제 구현이 없어도 대역 객체를 사용해서 테스트 가능
  • DI를 습관처럼 사용하기
    • 의존 객체는 주입받도록 코드 작성하는 습관

0개의 댓글