C# 제네릭 메서드 사용법: 형식 매개변수와 추론 기준

C# 제네릭 메서드는 동작은 같고 데이터 형식만 다른 코드를 한 번 작성하게 해줍니다. 호출 인수만으로 형식을 알 수 있으면 컴파일러가 T를 추론하고, 특정 기능이 필요한 형식만 받으려면 where 제약 조건을 붙이는 것이 핵심이에요.

C# 일반화 메서드의 형식 매개변수를 보여주는 기존 코드 화면
2015년 작성한 제네릭 메서드 예제입니다. 꺾쇠괄호의 T가 호출 시 실제 형식으로 결정됩니다.
C# 제네릭 메서드 호출 결과를 보여주는 기존 실행 화면
기존 예제의 실행 결과 화면입니다. 현재 .NET에서도 형식 추론 원리는 같습니다.
먼저 확인할 답
C# 제네릭 메서드는 동작은 같고 데이터 형식만 다른 코드를 한 번 작성하게 해줍니다. 호출 인수만으로 형식을 알 수 있으면 컴파일러가 T를 추론하고, 특정 기능이 필요한 형식만 받으려면 where 제약 조건을 붙이는 것이 핵심이에요.

object 대신 형식 매개변수를 쓰는 이유

object 매개변수는 어떤 값이든 받을 수 있지만, 꺼낼 때 형식 변환이 필요하고 잘못된 변환은 실행 중에야 드러납니다. 제네릭 메서드는 호출 시점에 실제 형식을 정하므로 컴파일러가 입력과 반환 형식을 검사해요. 값 형식의 불필요한 박싱도 줄일 수 있습니다.

메서드 이름 뒤의 는 아직 정해지지 않은 형식 자리입니다. T value처럼 매개변수에 쓰거나 T를 반환 형식으로 사용할 수 있어요. 형식 매개변수 이름은 짧은 예제에서 T를 쓰지만 역할이 여러 개라면 TKey, TValue처럼 의미를 드러내는 이름이 낫습니다.

형식 인수는 생략할 수 있지만 언제나 가능한 것은 아니다

Print(10)을 호출하면 인수 10을 보고 T를 int로 추론합니다. 반면 반환값에만 T가 등장하고 입력 매개변수에는 단서가 없다면 컴파일러가 형식을 정할 수 없어요. 이때는 MethodName()처럼 형식 인수를 직접 적어야 합니다.

추론은 반환받는 변수의 형식만 보고 결정되지 않습니다. 오버로드가 여러 개면 변환 규칙과 제약 조건까지 함께 작용하므로, 호출이 모호해졌다면 형식 인수를 명시하거나 메서드 이름과 매개변수 설계를 단순하게 바꾸세요.

where 제약은 메서드 안에서 사용할 수 있는 기능을 정한다

T에 아무 제약이 없으면 컴파일러는 모든 형식에 공통인 기능만 허용합니다. new T()가 필요하면 new() 제약을, 특정 인터페이스 멤버를 호출해야 하면 where T : IComparable처럼 제한해야 해요. 제약은 호출자를 괴롭히는 장식이 아니라 메서드 구현에 필요한 계약입니다.

제약을 지나치게 넓히면 쓸 수 없는 형식이 들어오고, 너무 좁히면 재사용성이 떨어집니다. 실제로 호출할 멤버와 생성 조건만 제약에 담고, null 허용 여부는 프로젝트의 nullable 설정과 함께 확인하세요.

static T Echo<T>(T value)
{
    return value;
}

int number = Echo(10);
string text = Echo("안녕");

적용 전에 확인할 체크리스트

기존 화면은 작성 당시의 기록으로 보존했습니다. 현재 작업에서는 제품·서비스·언어 버전과 공식 문서의 적용 대상을 먼저 맞추세요. 설정이나 코드를 한 번에 크게 바꾸지 말고, 변경 전 상태를 기록한 뒤 작은 예제로 결과를 확인하는 편이 안전합니다.

문제가 생기면 같은 조작을 반복하기보다 정확한 오류 문구, 사용 버전, 재현 단계, 기대한 결과와 실제 결과를 적어 두세요. 공개된 캡처에는 계정 주소, 비밀 키, 일련번호처럼 악용될 수 있는 정보가 없는지도 확인합니다.

자주 묻는 질문

기존 게시일과 URL은 바뀌나요?

아니요. 기존 글을 같은 URL에서 보완했으므로 과거 기록과 연결은 유지됩니다.

예전 화면과 현재 화면이 다르면 무엇을 따라야 하나요?

이미지는 당시 맥락을 이해하는 참고 자료로 보고, 실제 조작은 현재 버전의 공식 문서와 화면 문구를 기준으로 하세요.

한 번 확인한 뒤 계속 같은 방법을 써도 되나요?

버전과 정책이 바뀔 수 있습니다. 업데이트 뒤에는 핵심 동작과 보안 조건을 다시 확인해야 합니다.

공식 자료

이 글은 기존 게시물의 URL과 이미지 기록을 유지하면서, 현재 독자가 잘못 적용하기 쉬운 부분을 공식 자료에 맞춰 다시 정리했습니다.

댓글 쓰기

0 댓글