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