20240118_C#에서의 ref, out

2024. 1. 18. 23:23IT/TIL

오늘의 TIL은 기술 면접과 관련된 내용으로 정확하게 이해하지 못한 내용인 ref와 out에 대한 내용이다.

 

C#이나 유니티를 이용하면서 코딩을 하면서 따로 사용하지 않았던 키워드로

 

컴퓨터 공학이나 C언어에 대한 기본적인 지식이 없는 나로서는

 

ref와 out에 대해 물었을 때 참조 형식이라는 것 말고는 답할 수 있었던게 없었다.

 

그래서 이번 기회에 이 개념들을 정리하고자한다.

 

 

 

Ref 키워드(얕은 복사 매개변수 지정자)

Ref는 변수를 참조 형식으로 전달하는데 사용되며, 변수가 메소드 안에서 변경될 수 있다.

Ref는 명시적으로 작성해야되며, 매개변수로 전달하기 전에 반드시 초기화 되어야한다.

 

예를 들면 아래와 같이 작성할 수 있는데,

int var = 1;  // int var; 로 초기화하면 안됨

static void RefMethod(ref int i)
{
    i = 10;
}

RefMethod(ref var);
Console.WriteLine(var);

// output: 10;

 

RefMethod를 사용하려면 int var = 1; 이라고 먼저 초기화하고 사용해야 된다는 특징이 있다.

따라서 ref 키워드는 메소드 내에서 전달하는 변수를 변경해야될 때 좋은 선택인데,

다시 말해서 매개변수를 레퍼런스로 전달하는 것인데, 이는 해당 변수에 직접 접근하여 복사가 일어나는 것을 방지하므로

성능적으로 향상을 시켜주는 장점이 있다.

 

 

Out 키워드(출력용 매개변수 -> 내부에서 값을 할당해야한다)

Out 키워드는 Ref 키워드와 마찬가지로 변수를 참조 형식으로 전달하는데, 변수를 초기화하지 않고 작성하기 때문에

메소드 안에서는 할당해야된다.

Out은 명시적으로 작성해야되며, 매개변수로 전달하기 전에 초기화하지 않아도 상관없지만,

전달된 함수 내에서는 반드시 할당되어야 한다.

 

예를 들면 아래와 같이 작성할 수 있는데,

int var = 1; // int var;로 초기화해도 문제 없음

static void OutMethod(out int i)
{
    i = 10;
}

OutMethod(out var);
Console.WriteLine(var);

// output: 10;

 

OutMethod는 RefMethod와 달리 int var;로 값을 초기화하지 않았지만,

OutMethod 함수에서는 i = 10;으로 값을 할당해야된다는 특징이 있다.

 

따라서 out 키워드는 메소드 내에서 전달하는 변수를 초기화할 때 좋은 선택인데,

다시 말해서 var에 해당하는 값의 정확한 값을 몰라도 사용할 수 있다는 장점이 있다.

또, out 키워드는 메소드 내에서 반드시 할당해야되므로,

코딩을 하면서 값을 할당하지 않아 생기는 문제를 사전에 방지할 수 있다는 장점이 있다.

'IT > TIL' 카테고리의 다른 글

20240120_2의 거듭 제곱  (0) 2024.01.21
20240119_뒤에 있는 큰 수 찾기(프로그래머스)  (0) 2024.01.20
20240117_박싱 & 언박싱  (1) 2024.01.18
20240116_커피 심부름(프로그래머스)  (1) 2024.01.16
20240115_기술면접 관련  (0) 2024.01.15