차근차근 한걸음씩 개발 일기
[c# 문제해결] 값 타입 vs 참조 타입 본문
본 글은 개발하며 겪었던 어려운 점을 스스로 되새기기 위해 정리한 글입니다.
메모리 저장 타입 덕분에 애를 많이 먹어서 정리를 해보려한다.
이번 프레임워크 개선 작업에서 화면(엑셀 형식의 표)에 뿌려지는 데이터를 복사 & 붙여넣기 기능을 맡았다. 단순하게 파일복사, 엑셀 데이터 복사가 ctrl+c > ctrl+v 만 하면되니까 쉽겠거니 생각했다가 낭패를 본거 같다.
기존의 데이터를 복사하여 붙여넣기 위해서는 기존의 데이터의 값은 컴퓨터가 보유한 상태에서 새로운 메모리를 할당해서 데이터를 생성해야한다. 한마디로 값 타입으로 변수를 생성해야한다는 것이다. 하지만 c#에서 대부분의 함수들은 객체에 참조타입으로 걸린다.
.
.
.
.
(중략)
.
.
.
복사(複寫)는 문자나 사진·그림 등을 사진으로 복제하는 일.
복제(複製)는 본래의 것과 똑같이 제작하는 것, 또는 제작된 것 자체.
ctrl +v(복사) 는 클립보드(임시 메모리)에 있는 것을 가져와서 붙이는 기능이고
ctrl +d(복제) 는 선택한 개체를 클립보드를 거치지 않고 그대로 하나 더 복사하는 기능이다.
회사 프레임워크 내에서 'NotifyPropertyObject'리는 클래스가 있고 그 안에 Copy와 Clone이 구현이 되어 있다.
그리고 데이터를 복사할때 값타입으로 하기 위해서는 Clone 참조타입으로 하기 위해서는 Copy를 구현하면 될거 같다. 복제는 기존의 메모리를 참조해서 생성하기에 참조 타입, 복사는 새로운 메모리를 생성하기에 값 타입으로 생각하면 될거같다.
foreach( var a to w.ToArray())
{
b.add(a);
}
위의 코드를 통해 변수를 생성해도 참조타입으로 걸림.