[C# 소스] 클래스 간의 관계 - 2. 집합(Aggregation) 관계
[C# 소스] 클래스 간의 관계 - 2. 집합(Aggregation) 관계
[C# 소스] 클래스 간의 관계 - 2. 집합(Aggregation) 관계
필통과 펜의 관계처럼 "필통은 펜을 보관할 수 있다."라는 논리적 관계를 집합이라 합니다. 집합 관계에서는 소유 개체와 피 소유 개체의 생성 시기와 소멸 시기가 같지 않아도 됩니다.
using System;
using System.Collections;
namespace 집합_관계
{
class Pen
{
string maker;
string name;
public Pen(string maker, string name)
{
this.maker = maker;
this.name = name;
}
public override string ToString()
{
return string.Format("상품명:{0} 제조사:{1}", name, maker);
}
}
class PencilCase:IEnumerable
{
Pen[] buffer;
public PencilCase(int capacity)
{
buffer = new Pen[capacity];
}
public Pen this[string key]
{
get
{
foreach(Pen pen in buffer)
{
if(pen == null)
{
break;
}
if(pen.ToString() == key)
{
return pen;
}
}
return null;
}
set
{
int i;
for (i = 0; i<buffer.Length;i++)
{
if(buffer[i]==null)
{
break;
}
if(buffer[i].ToString() == key)
{
return;
}
}
if(i != buffer.Length )
{
buffer[i] = value;
}
}
}
public IEnumerator GetEnumerator()
{
return buffer.GetEnumerator();
}
}
class Program
{
static string MakeString(string name,string maker)
{
return string.Format("상품명:{0} 제조사:{1}", name, maker);
}
static void Main(string[] args)
{
PencilCase pc = new PencilCase(10);
string maker = "언휴";
string name;
for(int i = 0; i<10;i++)
{
name = i.ToString();
pc[MakeString(name, maker)] = new Pen(maker, name);
}
foreach(Pen pen in pc)
{
Console.WriteLine(pen);
}
}
}
}