icewall의 생각들, 여행기, 잡다한 일상 등등 icewall의 모든 것 입니다.
- 저작권 공지
- 블로그 오픈~
전체 (94)
Travelog (46)
EverydayLife (10)
PartOfLife (7)
작업 (3)
잡담 (13)
개발 (3)
일기 (7)
건강프로젝트 (5)
Google
Web www.icewall10.com
ARTICLES GUEST
REPLIES TRACKBACKS
«   2008/11   »
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            
 + Angst essen Seel..
 + In My World
 + WiseBell 하우스
 + 루오니의 집
 + 블로거기자단
 + 블로거뉴스
 + 이정환닷컴!
 + 최신개정판 세계..
 + 파파짱

 

 

Get RSS Page XML RSS2.0
Powered By TatterTools
Skin By zippy
Assignment - 해당되는 글 1건
2007/02/08   C#에서의 Assignment와 Reference 
* C#에서의 Assignment와 Reference
- 개발 | 2007/02/08 11:19
C#에서의 reference를 알아보기 위해 약간의 테스트를 하였다.
C#에서도 Java에서와 마찬가지로 모든 값들을 reference로 유지 하고 있었다.
의문점은 과연 이 reference가 언제까지 유지가 되며 언제 바뀌는지가 궁금하여 테스트를 해보았다.
결과는 다음과 같았다.

Class C1
{
   public Test test = new Test();
}

Class C2
{
   public Test test = new Test();
}

Class Test
{
   public string str = "Test";
}

C1 c1 = new C1();
C2 c2 = new C2();

c2.test = c1.test;

c1과 c2가 생성이 되면 안에 있는 test가 생성이 되면서 test는 각각의 Test instance를 reference로 만든다.
그리고 c2.test = c1.test가 되는 순간에 c2의 test는 기존에 가지고 있던 Test instance를 버리고 c1이 reference하고 있는 Test instance로 reference를 옮긴다. 
그래서 이 시점에 c1.test와 c2.test가 같은 Test instance를 reference하고 있는 것이다.
하지만 이것이

Test newTest = new Test();
c1.test = newTest;

를 하게 되면 c1과 c2가 함께 reference하고 있던 Test instance를
c1 --> newTest
c2 --> 예전 Test instance

를 reference 하게 된다.

하지만, c1.test = newTest를 하기전에
c1.test.str = "New Test";
를 하게 되면 이것은 c1.test가 가리키고 있는 Test instance를 직접 호출 하여 값을 바꾸는 것이 되기 때문에
c1.test와 c2.test가 함께 바뀌는 결과를 낳게 되는 것이다.

이 사실은 basic data type에도 같이 적용이 된다.
예를 들어
c1.int = 3;
은 c1.int를 직접 호출하여 값을 바꾸는 것이지만,
int x = 4;
c1.int = x;
를 하게 되면 c1.int의 reference 값을 바꾸에 되어 c1.int와 c2.int의 값이 달라지게 된다.

위 사실만 주지 하고 있으면, C#에서의 reference는 마스터를 할 수 있다고 볼 수 있다.


이올린에 북마크하기(0) 이올린에 추천하기(0)
 
이 글의 관련글
 
Post by icewall l Trackback 0 l Comment 0
Track this back : http://www.icewall10.com/icewall/trackback/89


prev   1   next