C#/기록 보관
C# ref , out 참조형식
seyeol
2023. 3. 9. 00:31
반응형
class MainApp
{
public static void Main()
{
double mean = 0;
Mean(5, 4, mean);
WriteLine(mean);
}
public static void Mean(double a, double b , double mean)
{
mean = (a + b) / 2;
}
}
이런식의 코드를 실행하면 어떤 값이 나올까? 4.5? 아니다 결과값은 0이 나온다
왜냐하면 매개변수가 값을 받아올때 방식이 값을 복사해서 가져오는것이기 때문이다
예를 들어 A =5; B=A; 라는 코드는 A의 5라는 값을 복사해서 B에 넣어주는것이기 때문에 여기서 B=100이런식으로 B값을 변경해도 A값의 변동은 없다 그러면 B값을 바꿨을때 A값도 변하게 할려면 어떻게 할까
값을 복사 해서 가져오는것이 아닌 그 값자체를 참조해서 가져오게 된다면 B값을 바꿨을때 A값도 변하게 할수있다
ref와 out이라는 것을 변수에 추가 시킨다면 그 값 자체를 참조 할수있게 된다
class MainApp
{
public static void Main()
{
double mean = 0;
Mean(5, 4,out mean);
WriteLine(mean);
}
public static void Mean(double a, double b , out double mean)
{
mean = (a + b) / 2;
}
}
그러면 ref와 out의 차이는 뭘까 ref는 매개변수의 값을 안바꿔도 문제가 생기지 않지만 out 키워드를 사용하면 매개변수의 값을 바꾸지 않는다면 문제가 발생하기 때문에 out를 사용하면 매개변수를 까먹고 사용하지 않았을때를 예방 할수있을것이다