아디봉의.net
C# 값.참조타입 메모리정의, 객체& 인스턴스정의 본문
값타입과 참조타입의 변수
값타입의 경우 이름을 선언함과 동시에 메모리가 할당되지만, 참조타입의 경우에는 변수의 선언과 변수에 대한 메모리의 할당이 분리되어있다.
Person sister = new Person();
Person = 클래스로 생성한 데이터 타입
sister = Person데이터타입으로선언한 변수
new = 메모리를 생성하는 연산자
Person() = 메모리 생성후 초기화 작업을 담당하는 생성자
Person sister; //변수의 이름을 선언하는 의미
sister = new Person(); //만든 이름에 메모리를 할당하는 의미
객체(Object)의 개념
객체도 변수의 한형태이며 클래스에서 만들어졌다해서 객체(Object)또는 인스턴스(Instance)라고 부른다.
우리는 값타입으로 변수를 만들어도 변수라고 하고, 클래스로 변수를 만들어도 변수라고 한다. 하지만 클래스를 이용해서 만든 변수를 다른 변수드로가 구분하기 위해서 객체또는 인스턴스(Instance)라는 용어를 사용한다.
new 연산자를 이용해서 메모리까지 생성하였다면 객체의 생성, 인스턴스 생성이라고한다.
객체의 메모리가 만들어지는 것을 인스턴스가 하나 만들어졌다고 말한다.
참조의원리
참조타입으로 변수만 선언했다면 그 변수에는 "아무것도 없다" 가 된다.
new 연산자를 이용해서 메모리를 생성하는 순간 비로소 참조타입의 변수에 값이 할당 되는 것이다. 즉 참조타입의 변수의 선언과 메모리의 생성이 완전히 분리되어 있다고 말할 수있다. 대표적인 참조타입은 "클래스"이다.
ex)
class RefSample{
public int mycom = 0 ;
public int youcom = 0;
}
public class RefSampleMain{
public static void Main()
{
RefSample rs = null; //변수선언
rs = new RefSample(); //메모리생성
}
}
참조타입의 메모리 생성순서
class Refsample | stack영역 | rs(객체변수) | |||
int mycom int youcom |
RefSample rs; 선언될때 rs= null |
|
heap영역 |
rs=new RefSample();
mycom(4byte) youcom(4byte) | |
값타입과 참조타입의 메모리를 가르키는 방식
값타입 : 메모리를 직접 가리킨다.
참조타입 : 메모리를 참조를 통해 가리킨다.
값타입과 참조타입의 값복사
값타입 : 값타입끼리 할당할때 메모리의 값들을 그대로 복사
참조타입 : 참조타입끼리 할당할떄 참조값만을 복사
값타입과 참조타입의 메모리 생성
값타입 : 변수의 선언과 동시에 메모리 생성
참조타입 : 변수의 선언과 메모리 생성분리
'C#' 카테고리의 다른 글
구조체와 클래스의 차이 (0) | 2012.09.14 |
---|---|
SOA, ESB, BPM, REST (0) | 2012.09.14 |
C# 클래스란? (0) | 2012.09.14 |
C# value 타입과 reference 타입 (0) | 2012.09.14 |
C# is와 as 차이점 사용법 (0) | 2012.09.14 |