Specialization Checklist

특수화는 “예외가 선명할 때”만 기본 템플릿을 대체한다

특수화를 쓰기 전에는 기본 템플릿, 함수 오버로딩, if constexpr로 해결되는지 먼저 확인합니다. 아래 판단표에서 오른쪽으로 갈수록 코드의 예외 규칙이 강해집니다.

결정 기준

문제가 무엇인지에 따라 선택지가 달라집니다.

상황 먼저 선택 특수화가 맞는 순간 피해야 할 신호
대부분 타입이 같은 의미 기본 템플릿 한 타입만 저장 방식이 완전히 다름 성능 추측만으로 분기
함수 동작만 다름 오버로딩 템플릿의 특정 타입 의미를 명시적으로 대체 호출 해석이 더 복잡해짐
타입 패턴 전체가 다름 부분 특수화 T*, T,T처럼 패턴이 반복됨 패턴끼리 우선순위가 애매함
컴파일 시 조건 분기 if constexpr 클래스 구조 자체를 바꿔야 함 런타임 조건처럼 남용

A. 특수화해도 되는 경우

1
예외 타입이 명확하다bool, const char*처럼 의미가 달라집니다.
2
구조가 달라진다멤버, 저장 방식, 타입 별칭이 달라집니다.
3
문서화할 수 있다왜 기본 구현이 틀린지 한 문장으로 설명됩니다.

B. 다른 도구가 나은 경우

1
함수만 다르다오버로딩이 호출 규칙을 더 단순하게 만듭니다.
2
조건이 작다if constexpr가 한 파일 안에서 더 읽히기도 합니다.
3
예외가 늘어난다특수화가 많아지면 유지보수 비용이 빠르게 커집니다.