차근차근 한걸음씩 개발 일기

[c# 문제해결] 값 타입 vs 참조 타입 본문

c# 개발노트/개발일기

[c# 문제해결] 값 타입 vs 참조 타입

노승희 2021. 3. 5. 16:41

본 글은  개발하며 겪었던 어려운 점을 스스로 되새기기 위해 정리한 글입니다.  

 

메모리 저장 타입 덕분에 애를 많이 먹어서 정리를 해보려한다.

 

 이번 프레임워크 개선 작업에서 화면(엑셀 형식의 표)에 뿌려지는 데이터를 복사 & 붙여넣기 기능을 맡았다. 단순하게 파일복사, 엑셀 데이터 복사가 ctrl+c > ctrl+v 만 하면되니까 쉽겠거니 생각했다가 낭패를 본거 같다.
 기존의 데이터를 복사하여 붙여넣기 위해서는 기존의 데이터의 값은 컴퓨터가 보유한 상태에서 새로운 메모리를 할당해서 데이터를 생성해야한다. 한마디로 값 타입으로 변수를 생성해야한다는 것이다. 하지만 c#에서 대부분의 함수들은 객체에 참조타입으로 걸린다. 

 

 

 

 

.

.

.

.

(중략)

.

.

.

 

 

복사(複寫)는 문자나 사진·그림 등을 사진으로 복제하는 일.
복제(複製)는 본래의 것과 똑같이 제작하는 것, 또는 제작된 것 자체.

 

ctrl +v(복사) 는 클립보드(임시 메모리)에 있는 것을 가져와서 붙이는 기능이고
ctrl +d(복제) 는 선택한 개체를 클립보드를 거치지 않고 그대로 하나 더 복사하는 기능이다.

 

 

 

 

 

 

 회사 프레임워크 내에서 'NotifyPropertyObject'리는 클래스가 있고 그 안에 Copy와 Clone이 구현이 되어 있다. 

그리고 데이터를 복사할때 값타입으로 하기 위해서는 Clone 참조타입으로 하기 위해서는 Copy를 구현하면 될거 같다. 복제는 기존의 메모리를 참조해서 생성하기에 참조 타입, 복사는 새로운 메모리를 생성하기에 값 타입으로 생각하면 될거같다.

 

foreach( var a to w.ToArray())

 {

           b.add(a);

 }

 

위의 코드를 통해 변수를 생성해도 참조타입으로 걸림.

'c# 개발노트 > 개발일기' 카테고리의 다른 글

[WPF, c#]실패작 박제  (0) 2021.03.18