각 클래스에서 직접 생성된 객체 분리하기
private final MenuItemRepository menuItemRepository = new LocalMenuItemRepository();
메뉴를 찾아서 출력 클래스로 전달할 Service 클래스에서 Repository에 저장된 데이터와 메서드를 사용하기 위해 Service 클래스에서 객체를 생성해서 직접적으로 구현 객체를 주입하고 있다. DIP(의존관계 역전 원칙)를 지키기 위해 외부에서 주입하도록 변경하였다.
package Kiosk;
import Kiosk.menu.LocalMenuItemRepository;
import Kiosk.menu.MenuService;
import Kiosk.menu.MenuServiceImpl;
public class KioskConfig {
// Kiosk에 MenuService을 주입
public Kiosk kiosk() {
return new KioskImpl(menuService());
}
//MenuService에 LocalMenuItemRepository를 주입
public MenuService menuService() {
return new MenuServiceImpl(new LocalMenuItemRepository());
}
}
KioskConfig kioskConfig = new KioskConfig();
// MenuServiceImpl이 MenuItemRepository 인터페이스에 의존
private final MenuItemRepository menuItemRepository;
// 생성자를 통해 menuItemRepository를 주입받음
public MenuServiceImpl(MenuItemRepository menuItemRepository) {
this.menuItemRepository = menuItemRepository;
}
Kiosk에서 Service의 메뉴 출력해주는 메서드를 사용하기 위해 menuService 객체를 주입하고, MenuService에서 Repository의 데이터와 메서드를 사용하기 위해 LocalMenuItemRepository를 주입하여 만약 나중에 데이터베이스가 변경된다면 Config 클래스만 수정하여 Service는 건들 필요 없도록 하였다.
'개발 > 내일배움캠프 TIL' 카테고리의 다른 글
[TIL #25] 키오스크 과제 리팩토링에 대한 고민 (0) | 2024.11.27 |
---|---|
[TIL #23] 싱글톤 패턴에 대하여 (0) | 2024.11.23 |
[TIL #21] 키오스크 과제 설계 및 중간 리팩토링 (0) | 2024.11.21 |
[TIL #20] 의존관계 주입 DI 와 제어의 역전 IoC (0) | 2024.11.21 |
[TIL #19] 좋은 객체 지향 설계의 5가지 원칙 (SOLID) (0) | 2024.11.19 |