Home 의존과 DI
Post
Cancel

의존과 DI

의존

기능구현을 위해 다른 구성요소들을 사용하는 것을 의미한다. (객체와 캡슐화 게시글 참고) 객체생성, 메소드 호출, 데이터를 사용하는것 모두를 의존한다고 표현한다.

의존하고 있다면 의존하는 대상이 변경될 경우, 그 변경이 전파될 가능성이 크다. (ex. 기존에 파라미터 3개 받던 메소드를 호출 -> 파라미터 2개로 변경 -> 호출했던 메소드도 변경)

그래서 순환의존이 위험하다.

  • 순환의존: A -> B -> C -> A 서로 꼬리를 맞물며 의존하고 있는 상태.

최대한 순환의존이 발생하지 않도록 해야한다.

🤫 의존대상이 많을 경우에는 ?

  • 한 클래스에 기능들이 많을 경우 -> 그 안에 의존하는 것들이 많아진다 -> 그럴수록 변동성이 커지고 순환의존의 가능성이 커진다. -> 기능별로 클래스를 쪼갠다.
  • 여러개의 의존 대상을 단일 기능으로 묶어서 대상을 줄인다.
  • 의존하는 대상을 객체로 생성한다. -> 의존하는 로직이 변경되면 객체가 변경된다. -> 의미가 없음

의존 대상 객체를 직접 생성하지 않는 방법?

  1. 팩토리, 빌더
  2. 의존주입(DI)
  3. 서비스 로케이터

의존주입(DI)

직접 생성하는게 아니라 생성자나 메소드를 이용해서 주입한다. 초기화되는 코드에서 사용한다.

🧐 왜 굳이 DI를 사용하는가?

  1. 의존하는 대상만 수정하면 그를 의존하는 메소드들은 변경하지 않아도 된다.
  2. 대역객체를 사용해서 테스트 가능 -> db가 없더라도 임의로 값을 넣고 그 값에 대해 테스트를 할수있다. (= 임의로 값을 넣어서 테스트할 수 있다.)

출처: 최범균, “객체 지향 프로그래밍 입문”, 인프런

This post is licensed under CC BY 4.0 by the author.

상속보단 조립

기능과 책임 분리