Day2

이한주·2023년 2월 22일
0

DI(Dependency Injection)에 대한 설명과 해당 기술의 장점에 대해 설명해주세요.

=> DI란 외부에서 두 객체 간의 관계를 결정해주는 디자인 패턴으로, 인터페이스를 사이에 둬서 클래스 레벨에서는 의존관계가 고정되지 않도록 하고 런타임 시에 관계를 동적으로 주입하여 유연성을 확보하고 결합도를 낮출 수 있게 해준다.

=> 의존성이란 한 객체가 다른 객체를 사용할 때 의존성이 있다고 한다.

=> DI의 장점은 다음과 같다.

  1. 의존성이 줄어든다.
  • 의존한다는 것은 그 의존대상의 변화에 취약하다는 것이다.
  • DI로 구현하게 되었을 때, 주입받는 대상이 변하더라도 그 구현 자체를 수정할 일이 없거나 줄어들게됨.
  1. 재사용성이 높은 코드가 된다.
  • 의존하는 클래스를 구분하여 구현하면, 다른 클래스에서 재사용할 수가 있다.
  1. 테스트하기 좋은 코드가 된다.
  • 의존 관계에 있는 클래스들을 분리해서 테스트할 수 있다.
  1. 가독성이 높아진다.
  • 의존관계의 클래스들의 기능들을 별도로 분리하게 되어 자연스레 가독성이 높아진다.

스프링에서 DI 구현은 어떻게 하는가?

  1. 생성자 주입
  • 객체의 생성자는 객체 생성시 최초 1회만 호출된다. 때문에 주입받은 객체가 불변 객체여야 하거나 반드시 해당 객체의 주입이 필요한 경우 사용한다.
  • 순환참조를 방지한다. 순환참조시 필드주입과 수정자 주입은 프로그램 실행 중에 runtime 에러가 발생하고, 생성자 주입시에는 프로그램 실행 시점에 compile 에러가 발생한다.
  1. Setter 주입
  • setter의 경우 객체가 변경될 필요성이 있다.
  1. Field 주입
  • 필드 주입 시 final 키워드를 선언할 수 없어 객체가 변할 수 있다.
  • 주입이 동시에 일어나 겹치는 경우 순환참조 에러가 난다.

DB에서 인덱스를 잘 사용하면 어떤 장점이 있을까요?

=> 인덱스의 장점으로는 테이블을 검색하는 속도와 성능이 향상된다.

모든 컬럼에 인덱스를 걸지 않는 이유

  • 테이블보다 인덱스의 용량이 더 커질 수 있다.
  • SELECT를 제외한 다른 DML의 속도가 많이 느려진다.

인덱스의 원리

0개의 댓글