private static void TestByteArrayReference(bool enabled = true) { if (!enabled) { return; } // 소스 패킷 MockPacket srcPacket = new MockPacket(1, new MockPacketBody(1, Encoding.UTF8.GetBytes("Hello"))); // 타겟 패킷: 소스 패킷의 바디의 데이터 부분만 참조 MockPacket tgtPacket = new MockPacket(2, new MockPacketBody(1, srcPacket.Bodies[0].Data)); Console.WriteLine($"Source Packet, data:{Encoding.UTF8.GetString(srcPacket.Bodies[0].Data)}"); Console.WriteLine($"Target Packet, data:{Encoding.UTF8.GetString(tgtPacket.Bodies[0].Data)}"); // 소스 패킷의 바디의 데이터 변경 (기존 데이터 변경) srcPacket.Bodies[0].Data[1] = 97; Console.WriteLine($"Source Packet, data:{Encoding.UTF8.GetString(srcPacket.Bodies[0].Data)}"); Console.WriteLine($"Target Packet, data:{Encoding.UTF8.GetString(tgtPacket.Bodies[0].Data)}"); // 소스 패킷의 바디의 데이터 변경 (새로 할당) srcPacket.Bodies[0].Data = Encoding.UTF8.GetBytes("World"); Console.WriteLine($"Source Packet, data:{Encoding.UTF8.GetString(srcPacket.Bodies[0].Data)}"); Console.WriteLine($"Target Packet, data:{Encoding.UTF8.GetString(tgtPacket.Bodies[0].Data)}"); }
/// <summary> /// List 객체 참조 테스트 /// </summary> /// <remarks> /// - 객체를 참조하는 경우, 원본 객체가 변경되면 참조하는 쪽에도 변경사항이 반영 됨 /// - 원본 객체가 새로 할당되는 경우, 참조 객체는 원본 객체의 기존 값을 유지하므로 연결 관계는 끊어짐 /// </remarks> /// <param name="enabled"></param> private static void TestListReference(bool enabled = true) { if (!enabled) { return; } // 원본 데이터 byte[] data = Encoding.UTF8.GetBytes("12345"); // 원본 데이터를 포함하는 패킷바디 MockPacketBody orgPacketBody = new MockPacketBody { CompressionType = 0, Data = data }; MockPacket orgPacket = new MockPacket { PacketType = 1, Bodies = new List <MockPacketBody> { orgPacketBody } }; // 패킷 데이터를 그대로 참조하는 패킷바디 복사본 MockPacket newPacket = new MockPacket { PacketType = 2, Bodies = orgPacket.Bodies }; // 원본 패킷의 패킷바디 변경 orgPacket.Bodies[0].Data = Encoding.UTF8.GetBytes("ABCDE"); // 원본 패킷의 패킷바디 출력 Console.WriteLine($"Original Packet, data:{Encoding.UTF8.GetString(orgPacket.Bodies[0].Data)}"); // 클론 패킷의 패킷바디 출력 Console.WriteLine($"Clone Packet, data:{Encoding.UTF8.GetString(newPacket.Bodies[0].Data)}"); // 원본 패킷을 삭제 orgPacket = null; // 클론 패킷의 패킷바디 출력 Console.WriteLine($"Clone Packet, data:{Encoding.UTF8.GetString(newPacket.Bodies[0].Data)}"); // 원본 패킷을 새로 할당 orgPacket = new MockPacket { PacketType = 2, Bodies = new List <MockPacketBody> { new MockPacketBody { CompressionType = 0, Data = Encoding.UTF8.GetBytes("98765") } } }; // 원본 패킷의 패킷바디 출력 Console.WriteLine($"Original Packet, data:{Encoding.UTF8.GetString(orgPacket.Bodies[0].Data)}"); // 클론 패킷의 패킷바디 출력 Console.WriteLine($"Clone Packet, data:{Encoding.UTF8.GetString(newPacket.Bodies[0].Data)}"); }