언어 자료구조 알고리즘/프로그래밍 실습

[C# 소스] 클래스 간의 관계 - 2. 집합(Aggregation) 관계

언제나휴일 2017. 9. 14. 10:13
반응형

[C# 소스] 클래스 간의 관계 - 2. 집합(Aggregation) 관계

 필통과 펜의 관계처럼 "필통은 펜을 보관할 수 있다."라는 논리적 관계를 집합이라 합니다. 집합 관계에서는 소유 개체와 피 소유 개체의 생성 시기와 소멸 시기가 같지 않아도 됩니다.

집합(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);

            }

        }

    }

}

 

 

반응형