본문 바로가기

객체 복사

[C#] 객체 복사 : 얕은 복사와 깊은 복사 4 앞서 3편에서 딕셔너리에 포함된 객체의 복사에 대해서 예제를 만들어 봤는데, 이를 더 쉽게 하는 방법이 있다. 우선 스택오버플로우 사이트에서 본 방법으로 함수를 사용하는 방법. 이 예제는 CloneDictionaryCloningValues 함수를 통하는 방법으로, 사용 예시는 Clone 함수 내부에 있다. 또 다른 방법은, C#에서 자체적으로 지원해 주는 방법이 있다. 이 방법은 확실히 위의 방법이나, 앞서 3편에서 보여드린 for문을 사용하는 방법 보다는 간단해 보인다. 하지만, 이 방법은 딕셔너리에서만 통하고 Concurrent 컨테이너들에서는 사용할 수 없다. 이 때는 또 따로 만들어야 한다. 더보기
[C#] 객체 복사 : 얕은 복사와 깊은 복사 3 객체 복사의 일반적인 사용 예시를 만들어 보려고 한다. 위의 클래스는 기본적인 데이터 클래스를 의도하는 testB 와 testB를 딕셔너리로 관리하는 testA 클래스를 나타낸다. testA 클래스에서는 앞서 보여준 Clone과 조금 다른 것을 알 수 있다. 본문 예시) 위의 예시는1. 본 클래스에 값을 삽입 2. 복사를 실행.3. 본 클래스의 값을 변경.4. 변경 된 값을 확인. 하는 순으로 진행 되었다. 결과는 다음과 같이 깊은 복사가 이루어 진 것을 확인 할 수 있다. 더보기
[C#] 객체 복사 : 얕은 복사와 깊은 복사 2 깊은 복사(Deep Copy)는 참조변수가 가르키는 힙 영역 객체를 복사하는 것으로 별도의 힙 영역객체를 생성한다. C# 에서 복사는 기본적으로 얕은 복사이기 때문에 깊은 복사는 별도로 구현해야 한다. 객체 복사 예시. 위의 예제는 앞서 설명한 복사를 예시로 만든 것이다. 여기서 확인 할 수 있듯이 복사 후에 원본의 값을 바꾸면 복사 대상의 값도 변경 됨을 확인 할 수 있다. 해서 다음과 같은 과정으로 깊은 복사를 해야 독립적으로 사용할 수 있다. 깊은 복사 예시 클래스. ICloneable을 상속 받으면 인터페이스로 Clone을 제공한다. 물론 상속 받지 않고 그냥 별도로 만들어도 상관없다. 해서, Clone 함수에서 내부 값을 새로이 생성한 객체에 적용하고 리턴하도록 Clone 함수를 채워준다. 깊은.. 더보기
[C#] 객체 복사 : 얕은 복사와 깊은 복사 1 얕은 복사(Shallow Copy)는 객체가 복사될 때, 시리제 객체가 아닌 스택에 있는 참조를 복사하는 것. 복사 예시 위의 예시에서 보듯이 test 클래스를 생성하여 값 1,2를 넣고, t2 클래스를 생성 객체를 복사한 결과에 대한 출력이다. 허나, 이에 대하여 주의 할 점은 원본 객체와 사본 객체가 같은 참조를 바라보기 때문에 사본 객체나 원본 객체의값을 변경하게 되면 얕은 복사된 모든 객체도 영향을 받는다. 그 예제는 다음과 같다. t.a 의 값을 변경한 결과가 t2에서도 영향을 주는 것을 위의 예제에서도 확인 할 수 있다. 더보기