ITEM 23 :: EFFECTIVE C#
안녕하세요, 23번째 시간입니다.
이번 챕터는 타입 매개변수에 대해 메서드 제약 조건을 설정하려면 델리게이트를 활용하라, 입니다. 이어서 계속 되는 제네릭 내용이네요. 사실 제네릭을 이런식으로 사용해본 적이 없어 쉽지만은 않지만 책 내용을 토대로 진행해보도록 하겠습니다.
설명
타입 매개변수에 대해 메서드 제약조건을 설정하려면 인터페이스로 하는 방법도 있으나 이는 꽤 많은 업을 추가로 수행해야 한다. 먼저 해당 메서드를 구현한 클래스를 구현해야 하고, 그 이후 메서드를 구현해야 한다. 또한, 이후 제네릭 클래스의 정의를 이용하여 닫힌 제네릭 클래스를 만들어야 한다. 이는 좋은 방법이 아니다!
따라서, 다음 방법을 권한다. 이는 제약 조건으로 설정하고 싶은 메서드의 원형에 부합하는 델리게이트를 성하는 것이다. 그저 델리게이트만 생성하면 된다. 더 이상 추가로 해야 할 작업은 없다. 사용자의 입장에서도 이처럼 델리게이트를 사용하는 방법이 훨씬 낫다.
결론
제네릭 클래스나 제네릭 메서드 하나를 사용하기 위해서 제약 조건으로 생성된 인터페이스를 구현한 타입을 매번 새롭게 만들어야 하는 경우라면 델리게이트를 이용하여 메서드에 대한 제약 조건을 설정하는 것이 훨씬 쉽다. 델리게이트를 이용하면 제네릭 타입을 더 쉽게 작성할 수 있고 사용하기에도 편하다. 하지만 특정 연산자, 정적 메서드, 델리게이트 타입, 여러 종류의 생성자 타입 등을 제약 조건으로 설정하기 위해서는 제네릭 인터페이스를 정의하고, 이를 구현한 헬퍼 타입을 만드는 것도 완전히 나쁜 방법은 아니다. 다만, 기존의 제약 조건과 전혀 호환되지 않는 엉뚱한 방식으로 기존 설계를 훼손하는 것은 문제가 된다. (어떤 경우에는 인터페이스가 나을수도 있지만 대부분의 경우에는 델리게이트가 간편하고 설계를 훼손하지 않으므로 좋다!)