/// <summary>
    /// 여기서 중요한게 수정할때를 따로 판단하지 못하기 때문에(deserialize할떄마다 호출)
    /// 매번 호출되면서 수정될때, 새로 등록될때, 등등을 전부 판단해서 처리 해야함.
    /// </summary>
    /// <param name="target"></param>
    public void RegisterString(GNString target)
    {
        foreach (var pair in allInstanceDic)
        {
            if (pair.Value.Contains(target))
            {
                if (target.id != pair.Key)
                {
                    //이미 등록이 되어 있는데 재등록을 하는데 키가 다르다면..(복잡하네;;)
                    var oldKey = pair.Key;
                    if (allInstanceDic[oldKey].Count == 1)
                    {
                        allInstanceDic.Remove(oldKey);
                        allWords.Remove(oldKey);
                    }
                    else
                    {
                        allInstanceDic[oldKey].Remove(target);
                        foreach (var u in allInstanceDic[oldKey])
                        {
                            u.stringList[0] = u.id;
                            allWords[oldKey][0] = u.id;
                        }
                    }
                    
                    if (!allWords.ContainsKey(target.id))
                    {
                        ///리스트가 이미 공유되어 있어서 분열되어야할때임.
                        var makeList = new List<string>();
                        makeList.AddRange(target.stringList);
                        makeList[0] = target.id;
                        target.stringList = makeList;
                    }
                    else
                    {
                        target.stringList = allWords[target.id];
                    }
                    break;// return;//종료 이미 등록되어 있었기 때문에 
                }
            }
        }

        if (allWords.ContainsKey(target.id))
        {
            //이미 
            target.stringList = allWords[target.id];
        }
        else
        {
            allWords.Add(target.id, target.stringList);
        }

        if (!allInstanceDic.ContainsKey(target.id))
            allInstanceDic.Add(target.id, new List<GNString>());

        if (!allInstanceDic[target.id].Contains(target))
        {
            allInstanceDic[target.id].Add(target);
        }
    }    
 //이게 파괴자에서 호출이 될까...?//
 public void ReleaseString(GNString target) {
     foreach (var pair in allInstanceDic)
     {
         if (pair.Value.Contains(target))
         {
             if(pair.Value.Count == 1)
             {
                 allInstanceDic.Remove(pair.Key);
                 allWords.Remove(pair.Key);
             }
             else
             {
                 pair.Value.Remove(target);
             }
             return;
         }
     }
 }