본문 바로가기
Programming/C# * Unity

[C#] 주소록 프로젝트 - 클래스 편

by 고막고막 2019. 3. 12.

주소록 요구사항

이름,전화,주소를 입력/검색/변경/삭제/전체출력 한다.


클래스 정의

1) 시작 클래스

2) 주소 클래스(Model)                       → 데이터

3) 메뉴 클래스(View)                         → 인터페이스 

4) 주소록 관리 클래스(Controller)         → 비즈니스 로직

## MVC: 일반적인 업무용 프로그램의 정석

## 객체화: 다른 클래스의 매서드를 갖다 쓰려면 반드시 객체를 생성해야 한다. new 클래스를 선언할때 메모리에 올라감.


범용적 기능을 가진 매서드 생성법

1) 클래스의 정체성을 훼손하며 편의상 해당 메서드를 자주 참조하는 클래스에 넣음

2) 클래스의 정체성을 유지하며 해당 메서드를 참조하는 클래스에서 (객체를 생성하지 않고) 매서드 앞에 클래스이름. 을 넣어준다.

3) Utility Class로 따로 생성해서 뺀다


    class Address
    {
        public string name;
        public string phone;
        public string address;
    }

    class Menu
    {
        AddressManager AddrMgr = new AddressManager();
        public void MainLoop()
        {
            while (true)
            {
                AddrMgr.ClearView();
                PrintMenu();
                int sel = GetSelectMenu();
                switch (sel)
                {
                    case 0:
                        AddrMgr.InputAddress();
                        break;
                    case 1:
                        AddrMgr.SearchAddress();
                        break;
                    case 2:
                        AddrMgr.UpdateAddress();
                        break;
                    case 3:
                        AddrMgr.DeleteAddress();
                        break;
                    case 4:
                        AddrMgr.PrintAddress();
                        break;
                    case 5:
                        ProgramExit();
                        break;
                    default:
                        Console.WriteLine("잘못 입력~");
                        break;
                }
            }
        }
        void PrintMenu()
        {
            Console.WriteLine("------------------");
            Console.WriteLine("0. 주소 입력");
            Console.WriteLine("1. 주소 검색");
            Console.WriteLine("2. 주소 수정");
            Console.WriteLine("3. 주소 삭제");
            Console.WriteLine("4. 주소 전체 출력");
            Console.WriteLine("5. 프로그램 종료");
            Console.WriteLine("------------------");
        }
        int GetSelectMenu()
        {
            int sel = -1; //의미없는 값으로 초기화
            Console.Write("메뉴를 선택하세요 >>> ");
            sel = Int32.Parse(Console.ReadLine());
            return sel;
        }
        void ProgramExit()
        {
            Environment.Exit(0);
        }
        public void ClearView()
        {
            Console.Clear();
        }
    }

    class AddressManager
    {
        List<Address> arrayAddress = new List<Address>();
        public void InputAddress()
        {
            Menu.ClearView();
            Console.Write("이름 입력: ");
            string name = Console.ReadLine();
            Console.Write("전화 입력: ");
            string phone = Console.ReadLine();
            Console.Write("주소 입력: ");
            string address = Console.ReadLine();
            Address addr = new Address();
            addr.name = name;
            addr.phone = phone;
            addr.address = address;
            arrayAddress.Add(addr);
        }
        public void SearchAddress()
        {
            Menu.ClearView();
            Console.Write("이름 입력: ");
            string name = Console.ReadLine();

            for (int i = 0; i < arrayAddress.Count; i++)
            {
                if (name == arrayAddress[i].name)
                {
                    Console.WriteLine("----------------------------", i);
                    Console.WriteLine("이름 : " + arrayAddress[i].name);
                    Console.WriteLine("전화 : " + arrayAddress[i].phone);
                    Console.WriteLine("주소 : " + arrayAddress[i].address);
                    Console.WriteLine("----------------------------");
                    break;
                }
            }
            Console.ReadKey();
        }
        public void UpdateAddress()
        {
            Menu.ClearView();
            Console.Write("이름 입력: ");
            string name = Console.ReadLine();

            for (int i = 0; i < arrayAddress.Count; i++)
            {
                if (name == arrayAddress[i].name)
                {
                    Console.WriteLine("----------------------------", i);
                    Console.WriteLine("이름 : " + arrayAddress[i].name);
                    Console.WriteLine("전화 : " + arrayAddress[i].phone);
                    Console.WriteLine("주소 : " + arrayAddress[i].address);
                    Console.WriteLine("----------------------------");
                    Console.Write("이름 입력: ");
                    string uName = Console.ReadLine();
                    Console.Write("전화 입력: ");
                    string phone = Console.ReadLine();
                    Console.Write("주소 입력: ");
                    string address = Console.ReadLine();
                    arrayAddress[i].name = uName;
                    arrayAddress[i].phone = phone;
                    arrayAddress[i].address = address;
                    break;
                }
            }
            Console.ReadKey();
        }
        public void DeleteAddress()
        {
            Menu.ClearView();
            Console.Write("이름 입력: ");
            string name = Console.ReadLine();

            for (int i = 0; i < arrayAddress.Count; i++)
            {
                if (name == arrayAddress[i].name)
                {
                    Console.WriteLine("----------------------------");
                    Console.WriteLine("이름 : " + arrayAddress[i].name);
                    Console.WriteLine("전화 : " + arrayAddress[i].phone);
                    Console.WriteLine("주소 : " + arrayAddress[i].address);
                    Console.WriteLine("----------------------------");
                    Console.Write("진짜 지울래요? [y/n]");
                    string yesOrNo = Console.ReadLine();
                    if (yesOrNo == "y")
                        arrayAddress.RemoveAt(i);
                    break;
                }
            }
            Console.ReadKey();
        }
        public void PrintAddress()
        {
            Menu.ClearView();
            for (int i = 0; i < arrayAddress.Count; i++)
            {
                Console.WriteLine("-----------{0}--------------", i);
                Console.WriteLine("이름 : " + arrayAddress[i].name);
                Console.WriteLine("전화 : " + arrayAddress[i].phone);
                Console.WriteLine("주소 : " + arrayAddress[i].address);
                Console.WriteLine("----------------------------");
            }
            Console.ReadKey();
        }
    }

    class AddressMVC
    {
        static void Main(string[] args)
        {
            Menu menu = new Menu();
            menu.MainLoop();
        }
    }