/// <summary>
        /// 객체를 생성할 때 생성자에서 호출됩니다.
        /// </summary>
        /// <param name="product"></param>
        protected virtual void Initialize(IProductWrapper product = null)
        {
            if (product == null) //새로운 데이터를 추가할 경우
            {
                Stock = new Inventory();
                Quantity = 1;
            }
            else                //기존의 데이터를 수정할 경우
            {
                Stock = product.Product.Clone() as Inventory;

                var inventory = product as InventoryWrapper;
                Item = inventory.Item;
                Specification = inventory.Specification;
                Warehouse = inventory.Warehouse;
            }
        }
        /// <summary>
        /// 수정 또는 새로 추가할 데이터를 데이터베이스와 ViewModel의 Items 속성에 각각 추가 및 적용한다.
        /// </summary>
        /// <returns></returns>
        public StockWrapper Update()
        {
            //추가 및 적용의 최소 조건들
            if (Item == null)
                throw new Exception("리스트박스에서 품목을 선택하세요.");
            if (Specification == null)
                throw new Exception("리스트박스에서 규격을 선택하세요.");

            InventoryWrapperDirector iwd = InventoryWrapperDirector.GetInstance();
            InventoryWrapper invenw = iwd.SearchAsSpecificationKey(Specification.ID);
            StockWrapper stockw = null;

            if (invenw != null)
            {
                //재고의 개수를 수정
                invenw.Quantity = InventoryQuantity;
            }
            else
            {
                //새로운 재고를 등록
                Inventory inven = new Inventory();
                inven.ItemID = this.Item.ID;
                inven.SpecificationID = this.Specification.ID;
                inven.Quantity = this.InventoryQuantity;
                inven.WarehouseID = this.Warehouse != null ? this.Warehouse.ID : null;
                invenw = new InventoryWrapper(inven);
                CollectionViewModelObserverSubject.GetInstance().NotifyNewItemAdded(invenw); //순서의 주의
                iwd.Add(invenw); //순서의 주의
            }

            if (_target != null) //InOutStock 데이터의 수정 코드
            {
                _target.Product = InOutStock;
                stockw = _target;
            }
            else //새로운 InOutStock 데이터의 추가 코드
            {
                InOutStock.InventoryID = invenw.ID;
                stockw = new StockWrapper(InOutStock);
                _viewModel.Add(stockw);
            }
            stockw.Product.Save<InOutStock>();
            return stockw;
        }
 /// <summary>
 /// for 기존 기록 수정
 /// </summary>
 /// <param name="stockItem"></param>
 public InventoryHelper(Inventory stockItem)
 {
     _stockItem = stockItem;
 }
 /// <summary>
 /// for 새로운 기록 추가
 /// </summary>
 public InventoryHelper()
 {
     _stockItem = new Inventory();
 }