일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- HTML
- 깃허브
- MSSQL
- Flutter
- MS-SQL
- 오류
- 플러터
- Maui
- Animation
- React JS
- 애니메이션
- page
- AnimationController
- 마우이
- .NET
- 리엑트
- listview
- JavaScript
- 파이어베이스
- Firebase
- MVVM
- Binding
- typescript
- 함수
- db
- GitHub
- 닷넷
- spring boot
- 바인딩
- 자바스크립트
Archives
- Today
- Total
개발노트
5. [ASP .NET Core] IList 사용하기 본문
반응형
IList<T> 사용으로 인한 변화 및 이점
1. 구체적인 구현에 의존하지 않음
- 기존 방식 (List<T> 사용):
- Order 클래스가 특정 구현인 List<T>에 의존합니다.
- 만약 나중에 아이템을 배열(Array)이나 다른 컬렉션(LinkedList<T>, ObservableCollection<T>)으로 바꾸고 싶다면 Order의 코드를 수정해야 합니다.
- IList<T> 사용:
- Order는 IList<T> 인터페이스를 통해 아이템 목록을 관리하므로, 내부에서 사용하는 컬렉션의 구현에 대해 알 필요가 없습니다.
- 이후 List<T> 대신 다른 컬렉션 구현으로 쉽게 교체할 수 있습니다.
//예시1
// List<IGameItem>을 전달
IList<IGameItem> gameItems = new List<IGameItem>();
gameItems.Add(new EquipmentItem("Sword"));
gameItems.Add(new MaterialItem("Wood"));
var order = new Order(gameItems); // `List<IGameItem>` 구현체 주입
//예시2
// ObservableCollection<IGameItem>을 전달
IList<IGameItem> observableItems = new ObservableCollection<IGameItem>();
observableItems.Add(new EquipmentItem("Shield"));
observableItems.Add(new MaterialItem("Stone"));
var order2 = new Order(observableItems); // `ObservableCollection<IGameItem>` 구현체 주입
//예시3
// LinkedList<IGameItem>을 전달
IList<IGameItem> linkedListItems = new LinkedList<IGameItem>();
linkedListItems.Add(new EquipmentItem("Bow"));
linkedListItems.Add(new MaterialItem("Iron"));
var order3 = new Order(linkedListItems); // `LinkedList<IGameItem>` 구현체 주입
2. 테스트 및 확장 용이성
- 테스트 더블(Mock, Fake 등) 적용 가능
- IList<T>를 사용하면 테스트 시 Mock<IList<T>> 또는 Fake 객체를 주입하여 테스트 환경을 설정하기가 쉽습니다.
- 이를 통해 다양한 시나리오를 테스트할 수 있습니다.
- 확장 가능한 디자인
- 향후 특정 컬렉션을 사용하거나 새로운 동작을 추가할 때 유연하게 대응할 수 있습니다.
- 예를 들어, 스레드 안전한 ConcurrentBag<T>나 실시간 반응이 필요한 ObservableCollection<T>로 변경이 가능합니다.
3. 코드 유지 보수성 향상
- OCP(Open-Closed Principle)를 지원
- 기존 Order 클래스는 수정하지 않고도 새로운 컬렉션 타입을 지원할 수 있습니다.
IList 사용전
public class Order
{
private readonly List<IGameItem> _gameItems; // 특정 구현에 의존
public Order()
{
_gameItems = new List<IGameItem>();
}
public void AddGameItem(IGameItem gameItem)
{
_gameItems.Add(gameItem);
}
}
단점:
- List<IGameItem>가 변경 불가능하면 다른 컬렉션 타입으로 전환하려면 Order 내부 코드를 수정해야 함.
IList 사용 후
public class Order
{
private readonly IList<IGameItem> _gameItems; // 인터페이스에 의존
public Order()
{
_gameItems = new List<IGameItem>(); // 생성자에서 구체적인 구현 선택
}
public Order(IList<IGameItem> gameItems) // 다른 구현체를 주입할 수도 있음
{
_gameItems = gameItems;
}
public void AddGameItem(IGameItem gameItem)
{
_gameItems.Add(gameItem);
}
}
장점:
- Order는 IList<IGameItem> 인터페이스만 알면 되므로, 구체적인 구현의 변경이 필요하지 않음.
- 테스트 시 다른 컬렉션 구현을 주입하여 쉽게 테스트 가능.
반응형
'서버 개발 > ASP .NET Core' 카테고리의 다른 글
4. [ASP .NET Core] 의존성 역전 원칙 (DIP) (1) | 2024.11.17 |
---|---|
3. [ASP .NET Core] 의존성 주입(DI), IoC 란 무엇인가? (with Simple Injector) (0) | 2024.11.17 |
2. [ASP .NET Core] 간단 API 만들기(with Dapper) (0) | 2024.11.10 |
1. [ASP .NET Core] 프로젝트 환경 세팅하기 (0) | 2024.11.10 |
Comments