c#에서 ref와 out을 정말 비슷한 기능을 가지고 있다. 실제로 둘의 기능을 사용하다 보면
개념을 확실하게 인지하지 않는 이상 무슨 차이인지 모르고 그냥 사용한다. 그렇기 때문에
오늘 이 둘의 차이를 확실하게 설명하고자 한다.
1. ref
ref는 참조 값을 메서드 인수로 전달한다.
다르게 말하자면 호출자에게 참조 값을 보내준다는 것이다.
이 함수를 실행해보면 결과 값은 5가 나오게 된다.
하지만 ref의 개념을 이 함수에 적용해보면 참조 값 (number = 3) 이 함수에서 호출한 val
에 전달 한 것이다.
요약하자면 number = 3의 참조 값이 메서드의 ref int val에 들어가고
메서드의 ref int val 이 메서드 안에 있는 val = 5를 가져오게 된다. (인자를 함수로 넘겨줌)
2. out
out은 인수가 참조로 전달된다.
이는 변수가 전달되기 전에 초기화 해주면 된다는 것이다.
이 함수도 실행하게 된다면 ref와 마찬가지로 결과 값은 5다.
하지만 out의 개념을 적용하여 설명해보자면
인수가 참조로 전달되기 때문에 참조가 인수로 전달되는 ref와 다르다.
out은 메서드 내에 있는 val 값이 인수인 out int val로 전달되고
값을 전달 받은 인수가 int number로 들어가게 된다. (정의한 값을 바깥으로 내보냄)
3. 차이점
ref는 참조가 인수로 전달되는 형태이기 때문에 메서드 바깥에서 무조건
참조 값이 선언돼있어야 한다.
out은 인수가 참조로 전달되는 형태이기 때문에 메서드 바깥에서 변수는
선언하되 참조 값은 넣어주지 않아도 된다.
예를 들어 ref는 int number = 3; 로 선언해둬야 하지만 out은 int number; 까지만
선언해놓아도 된다. 대신 out은 메서드 내에서 무조건 초기화 해주어야 한다.
요약하자면 기존에 있는 변수를 메서드 내에서 사용하려면 ref
메서드 내에서 값을 반환하여 사용하고 싶다면 out
3줄요약
ref와 out의 차이점은 ref는 참조 값을 인수로 전달하기 때문에 미리 선언된 변수 값을
사용해야 하지만 out은 인수를 참조로 전달하기 때문에 ref와 달리 변수만 선언해 놓고
메서드 내에서 값을 변환하는 형태로 사용할 수있다.
'TIL > C#' 카테고리의 다른 글
[C#] Struct와 Class의 차이점 (0) | 2023.10.26 |
---|---|
[C#] 접근제한자의 종류와 차이점 (0) | 2023.10.25 |
[C#] 디버그를 효율적으로 하는 방법 (1) | 2023.10.17 |
C# Enumerable.Repeat (1) | 2023.09.08 |
C# String.Replace (0) | 2023.09.07 |