C#/프로그래밍 고급
C# 프로그래밍 고급 - 12. 익명 객체
tita
2024. 5. 30. 18:00
C#은 다음과 같은 형식으로 클래스를 만들지 않아도 객체를 생성할 수 있습니다.
이처럼 클래스 이름 없이 생성하는 객체를 익명 객체라고 부릅니다.
new { <속성 A> = <값>, <속성 B> = <값> };
일반적으로 자주 사용하지는 않지만 Linq와 함께 사용할 때 굉장히 큰 효과를 발휘합니다.
다음 코드는 Linq의 select 구문에 익명 객체를 활용했습니다.
클래스를 따로 선언하지 않고도 객체의 배열을 만들고 활용합니다.
static void Main(string[] args)
{
List<int> input = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var output = from item in input
where item % 2 == 0
select new
{
A = item * 2;
B = item * item;
C = 100
};
foreach(var item in output)
{
Console.WriteLine(item.A);
Console.WriteLine(item.B);
Console.WriteLine(item.C);
Console.WriteLine();
}
}
/*
[실행 결과]
4
4
100
8
16
100
12
36
100
16
64
100
20
100
100
*/
<Linq 구문과 클래스 활용>
Linq 구문은 일반적으로 클래스와 함께 자주 사용됩니다. 관련된 예제를 살펴보겠습니다.
다음 코드는 제품의 이름과 가격을 나타내는 Product 클래스를 만들고, Product 클래스의 인스턴스로 리스트를 만들었습니다. 그리고 리스트에 Linq를 적용해 가격이 1500원보다 큰 제품을 이름 순서로 정렬해 선택합니다.
class Program
{
class Product
{
public string Name { get; set; }
public int Price { get; set; }
public override string ToString()
{
return Name + " : " + Price + "원";
}
}
static void Main(string[] args)
{
List<Product> input = new List<Product>();
{
new Product() { Name = "고구마", Price = 1500 },
new Product() { Name = "사과", Price = 2400 },
new Product() { Name = "바나나", Price = 1000 },
new Product() { Name = "배", Price = 3000 },
new Product() { Name = "감자", Price = 0500 },
new Product() { Name = "토마토", Price = 2000 },
new Product() { Name = "옥수수", Price = 1500 },
new Product() { Name = "자두", Price = 500 },
};
var output = from item in input
where item.Price > 1500
orderby item.Name ascending
select item;
foreach(var item in output)
{
Console.WriteLine(item);
}
}
}
/*
[실행 결과]
배 : 3000원
사과 : 2400원
토마토 : 2000원
*/