Programming/Effective C#

[Effective C# Item 27] 인터페이스는 간략히 정의하고 기능의 확장은 확장 메서드를 사용하라.

weekyear 2020. 10. 18. 14:31
 

확장 메서드를 이용하면 인터페이스에 새로운 동작을 추가할 수 있다. 인터페이스에는 가능한 한 최소한의 기능만을 정의하고, 확장 메서드를 세트로 함께 구현하면 손쉽게 기능을 확장할 수 있다. 특히 API를 추가적으로 정의하지 않고도 새로운 기능을 추가할 수 있다.


예시 : IEnumerable<T>

System.Linq.Enumerable 클래스가 이 기법을 활용한 대표적인 예다. System.Enumerable에는 IEnumerable<T>에 정의된 50개 이상의 확장 메서드가 포함되어 있다. Where, OrderBy, GroupInfo 등이 있다.

이처럼 IEnumerable<T>에 대해 확장 메서드를 정의하면 이미 IEnumerable<T>를 구현하고 있는 클래스를 수정할 필요가 없다. 이전과 동일하게 GetEnumerator()만 구현하면 충분하다. IEnumerator<T>를 구현할 때도 Current, MoveNext(), Reset()만 구현하면 된다. 별도의 구현 없이도 추가된 확장 메서드를 이용하여 컬렉션에 대해서 다양한 쿼리 연산을 수행할 수 있다.

새로운 인터페이스를 작성할 때도!!

새로운 인터페이스를 작성할 때도 동일한 패턴을 사용할 수 있다. 인터페이스는 정말 딱 필요한 기능만 포함하도록 하고 다양한 기능을 제공하는 메서드는 전부 확장 메서드로 돌리는 것이다.

이런 패턴을 적용하면 필수로 작성해야 하는 메서드의 수도 줄일 수 있고 사용자에게 더 풍부한 기능을 제공할 수 있다.


이번 파트는 당장 실전에서도 금방 써먹을 수 있는 것 같다.

다만, 이번 스킬은 한 인터페이스가 여러 클래스에 적용되는 경우에 확장 메서드를 통해 코드 중복을 피하면서 이득을 보는 것 같다.

하지만, 내가 작성한 코드는 인터페이스가 여러 군데에 적용되는 경우가 적어서 아직은 확장메서드를 적용할 부분이 잘 보이진 않는다. 유감..

Effective C#을 공부하는 분들은 참조용으로만 이 글을 참고하시고 책을 자세히 들여다보길 추천합니다.

참조 - Effective C# <강력한 C# 코드를 구현하는 50가지 전략과 기법, 이펙티브>, 빌 와그너, 김명신, 한빛미디어

반응형