Java | 의존 관계 주입 (의존성 주입)

Lumpen·6일 전
0

Java

목록 보기
36/38

의존 관계 주입 (DI)

하나의 인터페이스를 의존하는 여러 클래스가 있을 때
이를 사용하는 쪽에서 구체적인 클래스에 의존하고 있다면
다형성을 통해 클래스가 아닌 인터페이스에 의존하게 할 수 있다

인터페이스에 의존하게 된다면
해당 인터페이스를 구현한 모든 클래스 중
어떤 것이라도 사용할 수 있게 된다

때문에 코드가 유연해져
결합도는 낮고 응집도는 높아진다

구현

사용하는 쪽의 생성자에서 인터페이스로 구현된 클래스를 받아서
사용하도록 코드를 작성하고
인스턴스 생성 시 의존하게 될 구현된 클래스를 넣어준다

코드를 작성하는 시점에 의존 관계를 미리 설정(컴파일 타임)하는 것이 아니라
코드가 사용되어 프로그램이 실행되는 시점(런타임)에 의존 관계가 결정되기 때문에
의존성 주입 (의존 관계 주입) 이라고 표현한다

다형성을 통해 의존성 주입을 사용하면
이미 존재하는 배열의 맨 앞에 데이터를 여러번 추가해야 할 때
LinkedList 배열로 의존성을 주입하여 데이터를 추가하고 - (O(1))
그걸 ArrayList 배열로 변경하여 조회하는 등의 작업이 가능하다

구현하기 위해 중간에 의존성을 주입받아
클래스를 결정하는 Processor 클래스가 필요하다

  • 컴파일 타임에 추상적인 인터페이스에 의존하게 하여 런타임 시 인터페이스의 어떤 구현체라도 사용할 수 있게 된다
  • 생성자를 통해 의존 관계를 주입하면 생성자 의존관계 주입 (생성자 주입) 이라고 한다
  • 이렇게 코드를 작성하면 자연스럽게 OCP 원칙을 지키게 된다 (코드 변경 없이 인터페이스의 구현을 자유롭게 확장할 수 있다)
  • 컴파일 타임엔 추상적인 인터페이스에 의존, 런타임에 의존성 주입을 통해 구현체를 받아 사용함으로 좋은 코드를 작성할 수 있게 된다

전략 패턴
디자인 패턴 중 가장 중요한 패턴으로
알고리즘을 클라이언트 코드의 변경 없이 교체할 수 있다
의존성 주입을 통한 코드들이 전략 패턴에 해당하는 코드가 된다
클라이언트 코드의 변경 없이 전략을 변경할 수 있는 패턴

재사용성을 높이기 위해서는 주로 런타임에 결정되도록 코드를 작성한다
나중에 결정되게 한다는 것은 유연한 것이고
유연하면 재사용성이 자연스레 높아진다

profile
떠돌이 생활을 하는. 실업자, 부랑 생활을 하는

0개의 댓글