내배캠 2주차 C# 문법(5)

오도독·2024년 4월 26일

내배캠

목록 보기
9/26
post-thumbnail

제네릭

제네릭은 클래스나 메서드를 일반화시켜서 다양한 자료형에 대응할 수 있는 기술을 말해요.
제레닉을 사용하면 재사용성, 형식 안정성 및 효율성을 높일 수 있답니다.
C# 에서는 <T> 형태의 키워드를 이용해서 제너릭을 선언해요.
제너릭 형식의 매개변수는 컴파일 중에 형식 인수로 대체되는데 제네릭 클래스나 메서드에서 사용할 자료형이 선언 시점이 아닌 사용시점에 결정되는 것을 의미해요.
사용할 때에는 <T> 대신 구체적인 자료형을 넣어줍니다.

class Stack<T>
{
    private T[] elements;
    private int top;

    public Stack()
    {
        elements = new T[100];
        top = 0;
    }

    public void Push(T item)
    {
        elements[top++] = item;
    }

    public T Pop()
    {
        return elements[--top];
    }
}

// 제너릭 클래스 사용 예시
Stack<int> intStack = new Stack<int>();
intStack.Push(1);
intStack.Push(2);
intStack.Push(3);
Console.WriteLine(intStack.Pop()); // 출력 결과: 3

지난 번에 리스트, 딕셔너리, 스택 등과 같은 컬렉션에 대해 잠깐 알아봤었는데
그것들이 .NET 프레임워크에서 System.Collections.Generic 네임스페이스에 포함되어 있는 제네릭 클래스들 이에요.


out, ref 키워드

outref 키워드는 메서드에서 매개변수를 전달할 때 사용해요.
사용 예시를 보면

 // 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 키워드 사용 예시
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

메서드에서 값을 반환하는 것이 아니라 매개 변수를 이용해서 값을 전달 하는 것이에요.
out 키워드는 메서드에서 반환 값을 매개변수로 전달하는 경우에 사용하고, ref 키워드는 메서드에서 매개변수를 수정하여 원래 값에 영향을 주는 경우에 사용해요.
out 키워드는 메서드가 둘 이상의 값을 반환해야 하는 경우에 특히 유용하다고 해요.


※주의할 점

ref 매개변수로 메서드 내에서 해당 변수의 값을 직접 변경하므로 예기치 않은 동작을 초래할 수 있고, 값에 대한 복사 없이 메서드 내에 직접 접근할 수 있기 때문에 성능상 이점이 있지만 너무 남용하게 되면 코드의 가독성이 떨어지고 유지보수가 어려워질 수 있어서 적절한 상황에 사용하는것이 좋아요.

out 매개변수는 메서드 내에서 반드시 값을 할당해야해서 매개변수를 전달할 때 해당 변수의 이전 값이 유지되지 않으니 주의해주세요.

0개의 댓글