Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

나의 지식 보관소

ref와 out 본문

프로그래밍 언어/C#

ref와 out

야식은진리다 2019. 12. 24. 00:13

값에 의한 매개 변수 전달

메서드를 호출할 때 데이터를 복사해서 매개 변수에 넘기는 것을 값에 의한 전달이라고 부른다. 어떤 변수를 매개변수로 전달하면 값이 복사될뿐이므로, 매개변수의 값을 변경하여도 원래의 변수는 값이 변하지 않는다.

 

참조에 의한 매개 변수 전달

메서드를 호출할 때 매개 변수가 인자로 넘겨진 변수를 직접 참조 하는것을 참조에 의한 전달이라고 부른다. 매개 변수가 변수를 직접 참조할 경우에 매개변수를 수정하면 매개 변수가 참조하고 있는 변수에도 수정이 이루어진다.

 

ref 키워드

ref 는 C#에서 참조에 의한 매개 변수 전달을 위한 키워드중 하나이다. 사용법은 간단하다. 아래와 같이 매개변수 앞에 ref 키워드를 붙여 주면 된다

1
2
3
4
void swap(ref int a, ref int b)
{
    //메서드 
}

호출할때 또한 ref 키워드를 매개 변수 앞에 붙여주면 된다.

1
swap(ref x, ref y);

참조 반환값

메서드의 결과 또한 참조로 반환 할수있는데 이를 참조 반환값이라 부른다. 참조 반환값을 통해 메서드 호출자에게서 반환 받은 결과를 참조로 다룰수있다.

참조 반환값을 이용하기 위해서는 아래의 코드와 같이 ref 한정자를 사용하여 메서드를 선언하고, return이 반환하는 변수 앞에도 ref 키워드를 사용하여야한다.

1
2
3
4
5
6
7
8
9
class Something
{
    int value;
 
    public ref int SomeMethod()//ref 한정자로 메서드를 한정한다
    {
        return ref value;//반환할 필드나 객체 앞에 ref 키워드를 사용하여 return 하여준다.    
    } 
}

또한 결과를 담는 지역 변수와 호출할 메서드의 이름 앞에 아래의 코드와 같이 ref 키워드를 써주지 않는다면 값을 반환하는 평범한 메서드처럼 동작한다. 그리고 탐조로 반환 받은 결돠를 담는 지역 변수를 "참조 지역 변수" 라 부른다

1
2
Something thing = new Something();
ref int result = ref thing.SomeMethod();

 

out 키워드

out 키워드는 출력 전용 매개 변수라고 불린다. 두 개 이상의 결과를 요구하는 특별한 메서드에서 사용된다.

out 키워드는 아래 코드와 같이 ref 키워드를 사용하던것과 같이 사용하면 된다.

1
2
3
4
void swap(out int a, out int b)
{
    //메서드 
}

호출할때 또한 같다.

1
swap(out x, out y);

그렇다면 ref와 out의 차이점은 무엇일까 ref 키워드는 메서드가 해당 매개변수의 값에 결과를 저장하지 않는다 하여도 전혀 경고를 하지 않는다. 하지만 out 키워드는 메서드가 해당 매개 변수에 결과를 저장하지 않으면 컴파일러가 에러 메세지를 출력한다.

한편 메서드에서 그 지역 변수를 할당할것을 보장하기 때문에 메서드를 호출하는 쪽에서 초기화를 하지 않은 변수를 메서드의 out 매개변수로 넘기는것이 가능하다.

'프로그래밍 언어 > C#' 카테고리의 다른 글

선택적 매개 변수  (0) 2019.12.27
명명된 매개 변수  (0) 2019.12.27
가변길이 매개 변수 params  (0) 2019.12.27
메서드 오버로딩  (0) 2019.12.27
널 조건부 연산자 / 널 병합 연산자  (0) 2019.12.27