아디봉의.net
call by XXX 본문
1) 값(value)에 의한전달
c#의 매개변수의 전달은 값복사를 기본으로 한다.
값복사란 두개의 메모리가 존재하고 한쪽의 메모리에 들어있는 값을 다른쪽의 메모리로 그값만을 복사하는 행위를 말한다.
ex) using System;
class TestValue
{
static void CallByVal(int x)
{
x= 10000;
}
public static void mian()
{
int x1 = 10;
CallbyVal(x1)
console.writeline("Call-by-value:{0}",x1);
}
}
결과값 : Call-by-value: 10
이렇게 call by value 로 값을 전달하게 되면, callbyval()함수의 매개변수인 x는 외부에 존재하는 x1의 값을 값복사 하기 때문에 x의 값을 아무리 변경하려 해도 x1의 값에는 변함이 없다.
2) ref(reference)에 의한참조
메모리의 위치에 대한 참조이다.
ex) using System;
class TestValue
{
static void CallByVal(ref int x)
{
x= 10000;
}
public static void mian()
{
int x1 = 10;
CallbyVal( ref x1)
console.writeline("Call-by-value:{0}",x1);
}
}
이렇게 참조로 매개변수를 전달하기 위해서는 매개변수에 ref 키워드만 붙여주면된다.
참조로 값을 넘길때 참조할 대상은 반드시 초기화 되어야 한다.
3) out에 의한 참조
참조에 의한 전달을 할때 사용하는 키워드
참조로 값을 넘길때 참조할 대상을 초기화 할 필요는 없다.
ex) using System;
class TestValue
{
static void CallByVal(ref int x)
{
x= 10000;
}
public static void mian()
{
int x1; //참조대상을 초기화 하지 않았음
CallbyVal( ref x1)
console.writeline("Call-by-value:{0}",x1);
}
}
ref out의 비유
- ref와 out는 데이터베이스의 stored procedure 에서 사용되는 in 과 out매개변수에 비유할수 있다
- in 매개변수
stored procedure 내부에 값을 전달하기 위해 사용
- out 매개변수
stored procedure 외부에 값을 전달하기 위해 사용
'C#' 카테고리의 다른 글
C# const 상수 (0) | 2012.09.17 |
---|---|
C# static 과 상수 (0) | 2012.09.16 |
프로그램과 메모리 , 스택과 힙 (1) | 2012.09.16 |
구조체와 클래스의 차이 (0) | 2012.09.14 |
SOA, ESB, BPM, REST (0) | 2012.09.14 |