728x90
ref 와 out 키워드는 매개변수 작성시 사용되는 키워드로
함수호출시 전달받는 매개변수의 참조값을 전달하게 된다.
두개의 키워드는 제약의 차이점이 있다.
첫번째 차이점
우선 아무것도 하지않는 메서드를 작성해보자.
static void MethodRef(ref int m_value)
{
}
static void MethodOut(out int m_value) // CS0177 에러
{
}
CS 0177
현재 메서드를 벗어나기 전 out 매개변수를 할당해야한다.
out 키워드는 출력전용 키워드로 전달받은 매개변수의 값을 반드시 대입하여 내보내줘야한다.
static void MethodOut(out int m_value)
{
m_value = 5;
}
에러코드가 사라진다.
두번째 차이점
매개변수 입력과정을 살펴보자.
int refValue;
MethodRef(ref refValue); // CS0165 에러
int outValue;
MethodOut(out outValue);
CS 0165
할당되지 않은 변수를 사용했다.
말 그대로 초기화를 하지않은 변수를 대입하여 발생한 문제이다.
ref의 경우 입,출력이 자유로워 함수 내부 변수에 대입해야 할경우를 방지해 발생한 컴파일 에러다.
반면 out의 경우 출력전용(쓰기전용) 이므로
함수 내부변수에 대입할 상황이 발생되지 않아, 초기화 되어있지 않더라도 매개변수로 전달받을 수 있다.
위 두번째 차이점을 근거로
함수내의 변수에 매개변수를 대입해본다.
static void MethodRef(ref int m_value)
{
int a = m_value;
}
static void MethodOut(out int m_value)
{
int a = m_value; // CS0269 에러
}
CS 0269 할당되지 않은 매개변수를 사용중이다.
ref의 경우 내부의 변수에 대입시 아무런 문제가 발생되지 않는다.
참조만 전달할 뿐 사용은 자유로우며
매개변수를 전달받을때 반드시 초기화가 진행된 변수를 받으므로 문제가 없다.
반면 out 키워드사용시 해당 변수는 어차피 데이터를 읽어올 필요가 없으므로
초기화가 됐던 안됐던 함수로 들어와서 출력만 해주면 된다.
그렇기에 out 키워드의 매개변수는 초기화가 안됐을 가능성이 있으므로 발생되는 에러이다.
'C#' 카테고리의 다른 글
내 코드가 느린 이유 - 최적화에 대한 고찰 (1) | 2025.02.10 |
---|---|
C#을 활용한 콘솔 환경 채팅프로그램 만들기 (0) | 2024.11.09 |
C# - stack 주소와 heap 주소 찾기 (0) | 2024.07.25 |
C# 가변성,공변성, 반공변성, 불공변성 (0) | 2024.07.21 |
C# in 키워드 (0) | 2024.07.14 |