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;
        }


    }
}