ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 인벤토리 만들기
    C#/수업내용 2022. 6. 14. 14:08
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Study04
    {
        public class App
        {
    
    
            //생성자
            public App()
            {
                //Inventory 클래스의 인스턴스가 생성되고 변수 inven에 할당
                //Inventory 클래스의 생성자 호출
                Inventory inven = new Inventory(3);
    
                //Item 클래스의 인스턴스가 생성되고 변수 item1에 할당
                //Item 클래스의 생성자 호출
                //인스턴스 item1의 Name 속성에 "장검"할당
                Item item1 = new Item("장검");
    
                //인스턴스inven에 접근, 인자 item1으로 AddItem 메서드를 호출
                inven.AddItem(item1);
    
    
    
    
    
                inven.AddItem(new Item("단검"));
                inven.AddItem(new Item("활"));
                inven.AddItem(new Item("창")); //공간이 부족합니다.
    
                //인스턴스inven에 접근, 인자 "장검"으로 GetItem 매서드를 호출
                inven.GetItem("장검");
             
            }
        }
    }

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Study04
    {
        internal class Inventory
        {
            public Item[] items;
            private int nextIndex = 0;
            //멤버 변수이기 때문에 메소드가 실행이 끝나고 꾸준히 증가함
    
    
            //생성자
            public Inventory(int capacity)
            {
                //Item배열 형식의 인스턴스가 생성되고 맴버 변수items에 할당
                //Item클래스의 생성자 호출
                this.items = new Item[capacity];
            }
    
    
            public void AddItem(Item item)
            {
               
                //Item형식의 item1을 매개변수로 전달받음
                //메소드 진행간에 item은 인스턴스 item1이 소유한 값으로 진행
                //맴버변수 nextIndex (현재는 0) 가 3보다 크거나 같으면 공간부족을 출력하고 메소드 진행을 즉시 중단
                if (this.nextIndex >= this.items.Length)
                {
                    Console.WriteLine("공간부족");
                    return;
                }
                //멤버변수 nextIndex (현재는 0) 이 3보다 작으면 인스턴스 inven의 nextIndex와 배열변수items의 Length를 출력한다
                Console.WriteLine("{0},{1}", this.nextIndex, this.items.Length);
    
                //출력이 끝나면 배열변수items의 요소 items[nextIndex](현재는 0)에 item을 할당하고나서 다음 실행에 맴버변수nextIndex를 후위연산하여 1을 증가시킨다.
                this.items[this.nextIndex++] = item;
    
            }
    
            public Item GetItem(string name)
            {
                    //매개변수"장검"을 전달받음 이 메서드 내에서 name변수에 "장검"이 할당된 상태
                    //메서드 진행이 끝나면 지역변수는 사라지기 때문에 실제로 찾은 Item형식의 값을 저장하기 위해 foundItem변수를 정의하고 초기화
                Item foundItem = null;
    
                //Item형식의 배열변수 items내에 Item형식의 item들에 반복 순차 진행, 지역변수 item을 이용.
                //위의 AddItem메서드에서 this.items[this.nextIndex++] = item; 코드로 배열변수 items내에는 Item형식의 item들이 할당되어 있는 상태임.
                foreach (Item item in items)
                {
                    //만약 배열변수 내의 요소 Item 형식의 item변수의 이름이 전달받은 매개변수 "장검"과 이름이 같다면 if문을 진행
                    if (item.Name == name)
                    {
                        //찾은 Item형식의 item변수의 맴버변수 Name을 출력
                        Console.WriteLine("{0}을 찾았습니다.", item.Name);
                        //찾은 Item형식의 item을 foundItem변수에 저장
                        foundItem = item;
                        //원하던 이름의 Item형식의 item변수를 찾았다면 foreach 반복문을 중단.
                        break;
                    }
                }//end of foreach
    
                Console.WriteLine("{0}을 찾지못했습니다", name);
                //찾은 Item 형식의 item변수는 메서드가 끝나면 사라지기 때문에 foundItem변수에 저장해두었다가 메서드가 종료되기전에 Item형식으로 반환값을 출력함.
                return foundItem;
    
            }
    
        }
    }

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Study04
    {
        
    
        public class Item
        {
            public string Name
            {
                get;
                set;
            }
    
            public Item(string name)
            {
                //생성자
                //매개변수 name에 값이 속성 Name에 할당됨
                this.Name = name;
            }
    
    
        }
    }
Designed by Tistory.