본문 바로가기
유니티

Day 13 - C# (제너릭, out & ref 키워드)

by shin0707 2024. 4. 28.
728x90

  • 주제

1. 제너릭

2. out, ref 키워드


  • 공부내용

 

1. 제너릭이란?

클래스나 메소드에서 사용할 내부 데이터 타입을 내부에서 미리 지정하지 않고, 

외부에서 클래스를 사용할 때, 구체적인 타입을 기재하여 사용하는 것을 말한다.

한 가지 코드를 가지고, 다양한 자료형의 형태로 사용이 가능하다.

정확한 타입을 식별하기 쉬우며, 에러를 찾을 때도 용이하다.

 

1-1. 선언 방법

C#에서는 <T> 형태의 키워드를 이용하여 제너릭을 선언한다.

 

예제) T 부분에 데이터 타입을 기입하고, 매개변수 부분에 그 타입에 해당하는 값을 넣어주면

string으로 변환하여 출력하는 함수 생성

//string으로 변환하여 출력하는 함수
void ChangeToString<T>(T value)
{
	Console.WriteLine(value.ToString());
}


//위 함수가 잘 작동하는지 확인하고 싶을 때
void ChangeToString<T>(T value)
{
	string check = value.ToString();
	Console.WriteLine(check);
	Console.WriteLine(check.GetType().Name); //데이터타입 확인 GetType().Name
}

 

1-2. 사용 방법

T부분에 구체적인 자료형을 넣어준다.

ChangeToString<int>(10);
ChangeToString<bool>(false);
ChangeToString<float>(3.14);

[출력]
"10"
"false"
"3.14"

 

1-3. 자료형이 2가지인 제너릭 클래스 선언 및 사용

//선언
class Pair<T1, T2>
{
    public T1 name { get; set; }
    public T2 score { get; set; }

    public Pair(T1 newName, T2 newScore)  //매개변수를 받는 생성자
    {
        name = newName;
        score = newScore;
    }

    public void Display()
    {
        Console.WriteLine($"Name: {name}, Score: {score}");
    }
}
//사용
Pair<string, int> pair = new Pair<string, int>("PingGo", 100); //매개변수를 받는 생성자 호출
pair.Display();


[출력]
Name: PingGo, Score: 100

2. out, ref 키워드란?

매개변수 앞에 붙이는 키워드는 매개변수에 특정한 기능이나 역할을 부여할 때 사용한다.

out키워드는 메서드에서 매개변수를 이용하여 값을 전달하는 경우에 사용하고,

ref키워드는 메서드에서 매개변수를 수정하여 원래 값에 영향을 주는 경우에 사용한다.

 

2-1. out 키워드 사용 예시

//생성
void Divide(int a, int b, out int quotient, out int remainder)
{
    quotient = a / b;    //out키워드를 사용한 매개변수는 함수 내부에서 무조건 값을 세팅해야함
    remainder = a % b;
}

//사용
int quotient, remainder;
Divide(7, 3, out quotient, out remainder);
Console.WriteLine($"{quotient}, {remainder}");  

[출력]
2, 1             //(7나누기 3의 몫, 7나누기 3의 나머지)

 

2-2. out 키워드 실전 사용 예시

static void Main(string[] args)
{
    string str1 = "8282";
    string str2 = "9999";

    int num1;                                // 변수 선언
    if (Int32.TryParse(str1, out num1))      // out 키워드
    {
        Console.WriteLine($"str1 to int1 : {num1}");
    }

    if (Int32.TryParse(str2, out int num2))  // out 키워드에서 변수선언도 가능
    {
        Console.WriteLine($"str2 to int2 : {num2}");
    }


    Console.WriteLine($"int1 + int2 = {num1 + num2}");
}

[출력]
str1 to int1 : 8282
str2 to int2 : 9999
int1 + int2 = 18281

 

참조사이트

https://blockdmask.tistory.com/606

 

[C#] out 매개변수 한정자 설명 및 예제 (out 키워드)

안녕하세요. BlockDMask입니다. 지난 시간에 ref 키워드 포스팅에서 call by value, call by reference에 대해서 배우고 in 키워드에 대해서도 배워봤습니다. 오늘은 C#에서 매개변수를 넘길 때 붙여줄 수 있는

blockdmask.tistory.com

 

3-1. ref 키워드 사용 예시

//생성
void Swap(ref int a, ref int b)
{
    int temp = a;                  //a, b 자리교체
    a = b;
    b = temp;
}


//사용
int x = 1, y = 2;                  //초기화 하지 않은 변수는 ref로 넘길 수 없으므로, 반드시 초기화
Swap(ref x, ref y);
Console.WriteLine($"{x}, {y}"); 


[출력]
2, 1

ref 매개변수를 사용하면 메서드 내에서 해당 변수의 값을 직접 변경할 수 있으므로 주의가 필요하다.

 

3-2. ref 키워드 실전 사용 예시

public static void ChangeNumRef(ref int num)
{
	num = 10;
}

int a = 99;
ChangeNumRef(ref a);
Console.WriteLine(a);

[출력]
10

 

참조사이트

https://blockdmask.tistory.com/605?category=314327

 

[C#] ref 매개변수 한정자 설명 및 에제 (ref 키워드)

안녕하세요. BlockDMask입니다. 오늘은 C#에서 매개변수를 넘길 때 붙여줄 수 있는 한정자 중에 ref라는 키워드에 대해서 알아보려고 합니다. 1. ref 키워드 설명 2. ref 키워드 예제 3. ref, out, in 키워드

blockdmask.tistory.com

 

728x90
반응형