저번에 C#에서 interface안에 abstract static method를 선언할 수 있는 기능이 추가되었음. 사실 interface의 취지에 맞지 않아보이기도 하고, 뭔가 좋은 방법은 아닌 것 같아보이지만, 예상과는 다르게 코드를 상당히 깔끔하게 정리할 수 있게 도와줌.
C#에서 어떤 데이터 타입들에 대한 연산을 정의할 때 몇 가지 선택지가 있음.
1. Helper class 만들기 (extension method도 같은 맥락)
2. class 안에서 method 만들기 (operator overloading도 같은 맥락)
3. 기타 등등...
문제는 어떤 방법을 선택하더라도 다양한 타입에 대한 일반적인 연산을 제공할 수 없어서 아래와 같이 노가다를 했음.

왜냐하면 임의의 T타입에 대해서 + 연산이 존재하지 않을 수 있기 때문임. 몇 가지 차선책이 있지만 우리가 만들려고 하는 형태처럼은 만들어지지 않음. 그리고, 제네릭 제약조건을 잘 주면 가능하지 않을까 싶어도, operator+는 반드시 static이여야 하므로 몇 번 시도하면 사실상 불가능함을 알게 됨. 쉽게말해서, 어떤 클래스 Foo와 정적 메소드 bar에 대해서 Foo.bar()는 가능해도 T.bar()는 가능하지 않기 때문임.
그런데 C# 11에서 정적 추상 메소드가 추가되면서 이러한 문제를 해결할 수 있게 되었음. 인터페이스를 아래와 같이 만들어놓고 제네릭 제약조건으로 주면 끝임.

다만 Add 메소드 호출에 따른 T는 컴파일 타임에 추론되기 때문에 어떤 클래스 Foo와 정적 메소드 bar에 대해서 Foo.bar()는 불가능하고, T.bar()만 가능함.
결국 이것을 통해 얻는 것이 무엇이냐를 다시 한 번 생각해보면.. 제네릭에 대한 연산의 추상화를 얻는다고 볼 수 있음.