3월 28일 화요일 TIL 회고록
Q. DI(Dependency Injection)에 대한 설명과 해당 기술의 장점에 대해 설명해주세요
A.
DI(Dependency Injection) 이란?
외부에서 두 객체간에 관계를 결정해주는 디자인 패턴으로, 인터페이스를 사이에 둬서 클래스 레벨에서는 의존관계가 고정되지 않도록 하고 런타임 시에 관계를 동적으로 주입하여 유연성을 확보하고 결합도를 낮출 수 있게 해준다.
DI(Dependency Injection) 주입 방법
의존 관계 주입 방법은 크게 두가지가 있다.
1. 생성자 주입 방법
2. 수정자 주입 방법
생성자 주입 방법은 생성자를 이용해 의존 관계를 주입한 것이다. 생성자 주입은 생성자의 호출 시점에 1회 호출되는 것이 보장된다.
따라서 주입받은 객체가 변하지 않거나, 반드시 객체에 주입이 필요한 경우에 사용할 수 있다.
수정자 주입 방법은 객체의 Setter를 이용해 주입받는 것이다.
생성자 주입 방법과 다르게 주입받은 객체가 변경될 가능성이 있을 경우에 사용된다.
DI(Dependency Injection)의 장점
- 코드의 재사용성, 유연성이 높아진다. 하나의 작업만 수행하는 작은 객체는 많은 상황에서 재결합하고 재사용하기가 쉽기 때문이다.
- 객체간 결합도가 낮기 때문에 한 클래스를 수정했을 때 다른 클래스도 수정해야 하는 상황을 막아준다.
- 테스트 작성을 용이하게 해준다.
- 모듈의 생성과 삭제등을 직접 할 필요가 없기 때문에 코드의 양이 감소한다.
- 유지보수가 쉬워진다.
Q. DB에서 Index를 잘 사용하면 어떤 장점이 있을까요?
A.
Index란?
인덱스란 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조이다.
Index의 장점
- 테이블을 검색하는 속도와 성능 향상. 그에 따라 시스템의 전반적인 부하를 낮출 수 있다.
- 인덱스에 의해 데이터들이 정렬된 형태를 갖는다. 기존에는 Where문으로 특정 조건의 데이터를 찾기 위해서 테이블의 전체 조건과 비교해야하는 '풀 테이블 스캔' 작업이 필요했는데, 인덱스를 이용하면 데이터들이 정렬되있기 때문에 조건에 맞는 데이터를 빠르게 찾을 수 있다.
Index의 단점
- 인덱스를 관리하기 위한 추가 작업 필요
- 추가 저장 공간 필요
- 잘못 사용하는 경우 오히려 검색 성능 저하
Index를 사용하면 좋은 경우
인덱스를 효율적으로 사용하기 위해선 데이터의 range가 넓고 중복이 적을수록, 조회가 많거나 정렬된 상태가 유용한 컬럼에 사용하는 것이 좋다.
- 규모가 큰 테이블
- INSERT, UPDATE, DELETE 작업이 자주 발생되지 않는 컬럼
- WHERE나 ORDER BY, JOIN 등이 자주 사용되는 컬럼
- 데이터의 중복도가 낮은 컬럼