1. Model(Data) 에 대하여
1) Data
- MVVM 중 Model은 Data 계층에 속하며, MVVM 구조 중 가장 중요한 부분이라고 할 수 있다.
- Data 는 순수 데이터로만 이루어져있지 않고, 여러 레이어로 분리되어 체계적으로 사용됨.
2) 구분
- Entity(순수 데이터)
- Serivce(로직)
- DataProvider(접근) => Repository
- DTO(외부 데이터)
2. Entity(순수 데이터)

- 데이터 그 자체
- 로직이 없으며, 상태만을 가지는 순수 데이터를 의미함.
public class Product
{
public string Title { get; set; }
}
3. Service(로직)

- 데이터를 어떻게 처리할 것인지?
public class KeywordService
{
public List<string> ExtractTopKeywords(List<string> titles)
{
return titles
.SelectMany(t => t.Split(' '))
.GroupBy(w => w)
.OrderByDescending(g => g.Count())
.Select(g => g.Key)
.ToList();
}
}
> 핵심은 데이터를 가지고 계산, 가공을 하는 로직이 들어간다는 것
> LINQ 사용
4. DataProvider(접근) => Repository

- 데이터 접근을 위한 객체
1) 인터페이스
public interface IDataProvider
{
Task<List<string>> GetTitlesAsync();
}
> Title 을 반환하는 메서드를 가진 인터페이스
2) 구현(인터페이스 상속)
public class DummyDataProvider : IDataProvider
{
public Task<List<string>> GetTitlesAsync() => ...
}
> 하드코딩 되어있는 Title 데이터를 반환...
public class ApiDataProvider : IDataProvider
{
public Task<List<string>> GetTitlesAsync() => ...
}
> API 를 통해 얻은 Title 데이터를 반환...
3) Reposioty 패턴
- Reposiotry 패턴은 데이터 접근을 분리하는 기법임.
- Provider 를 종류별로 정의하고, ViewModel 에서는 데이터를 받기만 하면 됨.
- 데이터 소스 교체가 굉장히 쉬워지고, 테스트가 쉬워지는 장점이 있음.
< ViewModel >
var titles = await _provider.GetTitlesAsync();
> ViewModel 에서는 위의 provider 들의 종류를 알 필요가 없음.
5. DTO(DataTransferObject, 외부 데이터)

- 외부 데이터는 포맷이 각각 달라, 내부 프로그램과 데이터 구조가 다르다
- 따라서 그대로 사용할 수는 없고, DTO(변환해야 할 외부 데이터)를 Entity(내부 데이터) 로 변환하는 과정이 필요함.
1) 외부 데이터 형식
{
"items": [
{ "name": "iphone case", "price": 10 }
]
}
2) DTO
public class ApiResponse
{
public List<ItemDto> Items { get; set; }
}
public class ItemDto
{
public string Name { get; set; }
public int Price { get; set; }
}
> ApiResponse 형 객체는 외부 데이터 객체라고 할 수 있다.
2.1) Entity 변환
public class Product
{
public string Title { get; set; }
}
var products = response.Items
.Select(i => new Product { Title = i.Name })
.ToList();
> 여기서 response 는 ApiResponse형 객체로 외부 데이터 객체임.
> 여기서 products 는 Product형 객체로 내부 데이터 객체임.
> LINQ 사용
'FRAMEWORK > WPF' 카테고리의 다른 글
| WPF : ViewModel - DI(의존성 주입) (0) | 2026.04.25 |
|---|---|
| WPF : 타이머 만들기 (0) | 2026.04.23 |
| WPF : MVVM(Model - View - ViewModel) (0) | 2026.04.23 |
| WPF : WPF 에 대하여 (0) | 2026.04.22 |
