프로그래밍

[클린코드] 10,11장 정리

Victory_HA 2023. 11. 1. 00:17

강결합 코드를 의존성 주입 기법(DI)을 사용하여 결합도를 낮춰보는 예제이다.


  • CollectDataActor가 DeleteFileService에 의존성을 가지고 있다.
  • 이로인해서 CollectDataActor클래스는 DeleteFileService클래스에 강하게 결합되어 있고, 테스트나 변경사항에 취약할 수 있다.
public class CollectDataService
{
    private readonly DeleteFileService _deleteFileService;

    public CollectDataService(...)
    {
        _deleteFileService = new DeleteFileService();
    }

    public List<StartParseSmf> CollectDatas(CollectRecipe collectRecipe)
    {
        _deleteFileService.DeleteFiles(collectRecipe.ErrorPath, collectRecipe.ErrorDeleteDay);
    }
  • interface를 통해서 의존성 주입을 한다.
  • 먼저, CollectDataService클래스 interface 추출을 한다.
public interface IDeleteFileService
{
    void DeleteFiles(string errorPath, int errorDeleteDay);
}

...

public class DeleteFileService : IDeleteFileService
{
    public void DeleteFiles(string errorPath, int errorDeleteDay)
    {
        ...
    }
}
  • CollectDataService는 이제 interface 참조한다.
public class CollectDataService
{
    private readonly IDeleteFileService _deleteFileService;

    public CollectDataService(...)
    {
        _deleteFileService = new DeleteFileService();
    }

    public List<StartParseSmf> CollectDatas(CollectRecipe collectRecipe)
    {
        _deleteFileService.DeleteFiles(collectRecipe.ErrorPath, collectRecipe.ErrorDeleteDay);
    }
}
  • 그러나 CollectDataService()에서 DeleteFileService의 생성자를 호출하므로, 의존성을 가지고있다.
  • DeleteFileService의 의존성 제거를 위해, 의존성 주입 기법(DI)을 사용해보자.
public class CollectDataService
{
    private readonly IDeleteFileService _deleteFileService;

    public CollectDataService(..., IDeleteFileService deleteFileService)
    {
        _deleteFileService = deleteFileService;
    }

    public List<StartParseSmf> CollectDatas(CollectRecipe collectRecipe)
    {
        _deleteFileService.DeleteFiles(collectRecipe.ErrorPath, collectRecipe.ErrorDeleteDay);
    }
}
  • IDeleteFileService구현제를 생성 -> CollectDataService 생성자에 주입하도록 한다.
    IDeleteFileService deleteFileService = new DeleteFileService();
    CollectDataService service = new CollectDataService(deleteFileService);

'프로그래밍' 카테고리의 다른 글

[TDD] 테스트 대역 (Test double)  (0) 2023.12.13
정규 표현식 변환 시 유용한 사이트  (0) 2023.11.17
[클린코드] 11장 시스템  (0) 2023.10.29
[클린코드] 10장 클래스  (0) 2023.10.29
[클린코드] 6,7장 정리  (1) 2023.10.18