드디어 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#의 타입을 실제 프로젝트에서 활용할 수 있는 수준이 되었어요! 🎉