[C#] 재네릭 / out,ref 키워드
[C#] 재네릭 / out,ref 키워드
재네릭 / out,ref 키워드
재네릭
- 제너릭은 클래스나 메서드를 일반화시켜 다양한 자료형에 대응할 수 있는 기능이다.
- 제너릭을 사용하면 코드의 재사용성을 높일 수 있다.
- C#에서는
<T>형태의 키워드를 이용하여 제너릭을 선언한다. - 제너릭 클래스나 메서드에서 사용할 자료형은 선언 시점이 아닌 사용 시점에 결정된다.
- 제너릭 클래스나 메서드를 사용할 때는
<T>대신 구체적인 자료형<int>을 넣어준다.
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
List<int> list = new List<int>();
list.Add(1); // int만 추가 가능
Console.WriteLine(list[0]); // 1
class Pair<T1, T2>
{
public T1 First { get; set; }
public T2 Second { get; set; }
public Pair(T1 first, T2 second)
{
First = first;
Second = second;
}
public void Display()
{
Console.WriteLine($"First: {First}, Second: {Second}");
}
}
Pair<int, string> pair1 = new Pair<int, string>(1, "One");
pair1.Display(); //First: 1, Second: One
Pair<double, bool> pair2 = new Pair<double, bool>(3.14, true);
pair2.Display(); //First: 3.14, Second: True
out,ref 키워드
out, ref 키워드는 메서드에서 매개변수를 전달할 때 사용한다. 메서드에서 값을 반환하는 것이 아니라, 매개변수를 이용하여 값을 전달할 수 있다.
- out
- 메서드에서 반환 값을 매개변수로 전달하는 경우에 사용
1 2 3 4 5 6 7 8 9 10
// out 키워드 사용 예시 void Divide(int a, int b, out int quotient, out int remainder) { quotient = a / b; remainder = a % b; } int quotient, remainder; Divide(7, 3, out quotient, out remainder); Console.WriteLine($"{quotient}, {remainder}"); // 출력 결과: 2, 1
- 메서드에서 반환 값을 매개변수로 전달하는 경우에 사용
- ref
- 메서드에서 매개변수를 수정하여 원래 값에 영향을 주는 경우에 사용. 즉 참조로 전달되며, 메서드에서 해당
변수의 값을 읽고 변경할 수 있게 해준다.1 2 3 4 5 6 7 8 9 10 11
// ref 키워드 사용 예시 void Swap(ref int a, ref int b) { int temp = a; a = b; b = temp; } int x = 1, y = 2; Swap(ref x, ref y); Console.WriteLine($"{x}, {y}"); // 출력 결과: 2, 1
- 메서드에서 매개변수를 수정하여 원래 값에 영향을 주는 경우에 사용. 즉 참조로 전달되며, 메서드에서 해당
주의 사항
- 값의 변경 가능성:
ref매개변수를 사용하면 메서드 내에서 해당 변수의 값을 직접 변경할 수 있다. 이는 예기치 않은 동작을 초래할 수 있으므로 주의가 필요하다. - 성능 이슈:
ref매개변수는 값에 대한 복사 없이 메서드 내에서 직접 접근할 수 있기 때문에 성능상 이점이 있다. 그러나 너무 많은 매개변수를ref로 전달하면 코드의 가독성이 떨어지고 유지보수가 어려워질 수 있다. 적절한 상황에서ref를 사용하는 것이 좋다. - 변수 변경 여부 주의:
out매개변수는 메서드 내에서 반드시 값을 할당해야 한다. 따라서out매개변수를 전달할 때 해당 변수의 이전 값이 유지되지 않으므로 주의해야 한다.
This post is licensed under CC BY 4.0 by the author.