소프트웨어 설계에서 계층적인 관계란 모듈이나 컴포넌트가 서로 상하 관계를 가지는 구조를 의미합니다. 일반적으로 상위 계층은 하위 계층의 기능을 사용하고, 하위 계층은 상위 계층에 대한 어떠한 정보도 갖지 않습니다. 이러한 구조는 명확한 책임 분리와 유지 보수의 용이성을 제공합니다.
예시: 3계층 아키텍처
- 프레젠테이션 계층 (Presentation Layer)
- 사용자 인터페이스와 직접 상호작용합니다.
- UI 관련 로직을 포함합니다.
- 비즈니스 로직 계층 (Business Logic Layer):
- 애플리케이션의 핵심 기능을 구현합니다.
- 비즈니스 규칙과 로직을 처리합니다.
- 데이터 접근 계층 (Data Access Layer):
- 데이터베이스와 상호작용합니다.
- 데이터 CRUD(Create, Read, Update, Delete) 작업을 처리합니다.
계층 간 종속성 문제
계층 간 종속성 문제는 주로 다음과 같은 상황에서 발생합니다:
- 상위 계층이 하위 계층을 참조하는 것은 정상입니다. 그러나 하위 계층이 상위 계층을 참조하거나, 동일한 계층 내에서 서로 참조가 일어나는 경우 문제가 발생할 수 있습니다.
- 이러한 종속성은 의존성 순환(circular dependency)을 유발할 수 있습니다. 이는 변경이 발생할 때 서로에게 영향을 미쳐 코드의 유지 보수성을 떨어뜨리고, 코드의 이해와 테스트를 어렵게 만듭니다.
예시 시나리오
<정상적인 계층 구조>
- 프레젠테이션 계층:
- UI 모듈 (WpfExplorer.UI)
- 비즈니스 로직 계층:
- 서비스 모듈 (WpfExplorer.Services)
- 데이터 접근 계층:
- 데이터 모듈 (WpfExplorer.Data)
이 구조에서는 WpfExplorer.UI가 WpfExplorer.Services를 참조하고, WpfExplorer.Services가 WpfExplorer.Data를 참조합니다. 각 계층은 바로 아래 계층만 참조합니다.
WpfExplorer.UI
↳ WpfExplorer.Services
↳ WpfExplorer.Data
<계층 간 종속성 문제 발생>
만약 프레젠테이션 계층의 UI 모듈이 데이터 접근 계층의 데이터 모듈을 직접 참조하게 되면, 아래와 같은 종속성이 발생합니다:
- 프레젠테이션 계층:
- UI 모듈(WpfExplorer.UI)
- 데이터 모듈(WpfExplorer.Data)
- 비즈니스 로직 계층:
- 서비스 모듈(WpfExplorer,Services)
이 경우, WpfExplorer.UI가 WpfExplorer.Data를 직접 참조합니다. 이렇게 되면 UI에서 데이터 접근 로직을 직접 호출하게 되어 계층 간의 경계가 모호해집니다.
WpfExplorer.UI
↳ WpfExplorer.Services
↳ WpfExplorer.Data (직접 참조)
결론
- 계층적 종속성은 각 계층이 명확한 책임을 가지고, 하위 계층만 참조하는 구조를 의미합니다.
- 의존성 주입을 사용하여 직접 참조를 줄이고, 각 계층 간의 결합도를 낮춤으로써 유연성과 유지 보수성을 높일 수 있습니다.
- 계층 간의 직접 참조를 피하면, 각 모듈은 더 독립적이고 테스트 가능하게 됩니다.
'C#' 카테고리의 다른 글
[C#] 프로젝트 참조와 싱글톤 패턴의 차이 (0) | 2024.06.02 |
---|---|
[C#] Partial 메소드 란? (0) | 2024.05.09 |
[C#] init 접근자 란? (2) | 2024.05.07 |
[C#] BackgroundWorker와 Thread 차이 (0) | 2024.04.17 |
[C#] Sealed 클래스 (0) | 2024.04.15 |