본문 바로가기
카테고리 없음

C# 타입 완전 정복 (4편) - 실전편: 복합적인 데이터 처리 시스템 구현

by bbongz 2025. 3. 11.

 

드디어 C# 타입 시리즈 마지막 4편, 실전편입니다! 🚀
이전 글에서 배운 기본 타입, 컬렉션, 데이터 처리 타입실제 프로젝트에서 어떻게 활용할지 알아볼 거예요.

이번 글에서 다룰 내용

클래스를 활용하여 사용자 정의 타입 만들기
C#이 제공하는 다양한 타입(List<T>, Dictionary<K,V>, DateTime, Enum 등) 조합
객체 생성, 초기화, 변경, 삭제
LINQ 메서드 구문을 활용한 데이터 검색, 필터링, 변환

 

실제 데이터 처리가 많은 시스템을 가정하고, 현업에서 바로 활용할 수 있는 코드 예제와 함께 설명할 테니 끝까지 집중해서 따라와 보세요! 😃


1️⃣ 요구사항 분석 - "온라인 주문 관리 시스템"

💡 시나리오

온라인 쇼핑몰에서 고객의 주문을 관리하는 시스템을 개발한다고 가정합니다.
이 시스템은 고객(Customer), 주문(Order), 상품(Product) 데이터를 관리해야 해요.

🔹 주요 요구사항

고객이 주문을 생성할 수 있다.
주문에는 여러 개의 상품이 포함될 수 있다.
주문 데이터를 필터링, 검색, 정렬할 수 있어야 한다.


2️⃣ class를 활용한 타입 정의

우선, 고객(Customer), 주문(Order), 상품(Product)을 나타내는 클래스를 정의합니다.
각 클래스에는 C#의 다양한 타입을 활용할 거예요.


1. 상품 (Product) 클래스

상품을 나타내는 Product 클래스는 기본 타입과 enum을 활용합니다.

enum Category  
{  
    Electronics,  
    Clothing,  
    HomeAppliance  
}  

class Product  
{  
    public int ProductId { get; set; }  
    public string Name { get; set; }  
    public decimal Price { get; set; }  
    public Category ProductCategory { get; set; } // Enum 타입 사용  
}

2. 주문 (Order) 클래스

주문은 여러 개의 상품을 포함해야 하므로 Dictionary<Product, int>를 사용합니다.

class Order  
{  
    public int OrderId { get; set; }  
    public DateTime OrderDate { get; set; }  
    public Dictionary<Product, int> Products { get; set; } = new Dictionary<Product, int>(); // 상품 & 수량  

    public void AddProduct(Product product, int quantity)  
    {  
        if (Products.ContainsKey(product))  
            Products[product] += quantity;  
        else  
            Products[product] = quantity;  
    }  
}

3. 고객 (Customer) 클래스

고객은 여러 개의 주문을 가질 수 있으므로 List<T>를 사용합니다.

class Customer  
{  
    public int CustomerId { get; set; }  
    public string Name { get; set; }  
    public List<Order> Orders { get; set; } = new List<Order>();  

    public void AddOrder(Order order)  
    {  
        Orders.Add(order);  
    }  
}

3️⃣ 객체 생성, 초기화, 변경 예제

고객과 주문 데이터 생성

// 고객 생성
Customer customer = new Customer { CustomerId = 1, Name = "Alice" };

// 상품 생성
Product laptop = new Product { ProductId = 101, Name = "Laptop", Price = 1200.99m, ProductCategory = Category.Electronics };
Product tshirt = new Product { ProductId = 102, Name = "T-Shirt", Price = 19.99m, ProductCategory = Category.Clothing };

// 주문 생성 및 상품 추가
Order order1 = new Order { OrderId = 1, OrderDate = DateTime.Now };
order1.AddProduct(laptop, 1);
order1.AddProduct(tshirt, 3);

// 고객의 주문 목록에 추가
customer.AddOrder(order1);

// 출력
Console.WriteLine($"고객: {customer.Name}");
foreach (Order order in customer.Orders)  // var 사용 가능
{  
    Console.WriteLine($"주문번호: {order.OrderId}, 주문 날짜: {order.OrderDate}");
    foreach (KeyValuePair<Product, int> item in order.Products)  // var 사용 가능
    {  
        Console.WriteLine($"- 상품: {item.Key.Name}, 수량: {item.Value}, 총 가격: {item.Key.Price * item.Value:C}");
    }  
}

4️⃣ LINQ를 활용한 데이터 검색, 필터링, 변환

1. 특정 가격 이상의 상품 찾기

List<Product> expensiveProducts = customer.Orders  
    .SelectMany(order => order.Products.Keys)  
    .Where(product => product.Price > 50)  
    .ToList(); // var 사용 가능

Console.WriteLine("💰 50달러 이상의 상품:");
foreach (Product product in expensiveProducts)  // var 사용 가능
{
    Console.WriteLine($"{product.Name} - {product.Price:C}");
}

2. 특정 카테고리의 상품 필터링

IEnumerable<Product> clothingItems = customer.Orders
    .SelectMany(order => order.Products.Keys)
    .Where(product => product.ProductCategory == Category.Clothing); // var 사용 가능

Console.WriteLine("👕 의류 카테고리 상품:");
foreach (Product item in clothingItems)  // var 사용 가능
{
    Console.WriteLine($"{item.Name}");
}

3. 고객의 총 지출 금액 계산

decimal totalSpent = customer.Orders
    .SelectMany(order => order.Products)
    .Sum(item => item.Key.Price * item.Value); // var 사용 가능

Console.WriteLine($"💳 총 지출 금액: {totalSpent:C}");

4. 주문 목록을 주문 날짜 기준으로 정렬

IOrderedEnumerable<Order> sortedOrders = customer.Orders.OrderBy(order => order.OrderDate); // var 사용 가능

Console.WriteLine("📅 주문 날짜 순 정렬:");
foreach (Order order in sortedOrders)  // var 사용 가능
{
    Console.WriteLine($"- 주문번호: {order.OrderId}, 날짜: {order.OrderDate}");
}

✅ 마무리

이번 글에서는 C#에서 실제로 데이터를 다루는 방법을 배웠어요! 🚀

클래스를 활용한 사용자 정의 타입 구현
List<T>, Dictionary<K,V>, Enum, DateTime 활용
객체 생성, 초기화, 변경, 삭제
LINQ를 활용한 데이터 검색, 필터링, 정렬, 계산

 

이제 C#의 타입을 실제 프로젝트에서 활용할 수 있는 수준이 되었어요! 🎉