반응형 C#59 [Effective C#] Item 35 확장 메서는 절대 오버로드 하지 마라 확장 메서드는 설계 의도를 드러내는 방법으로는 썩 훌륭하지 않다. 확장 메서드를 사용하는 대부분의 경우가 기존에 개발된 타입을 개선하기 위해서이지 타입의 본질적인 동작 방식을 변경하기 위해서는 아니기 때문이다. 왜 확장 메서드로 타입을 확장해서는 안 되는가? 확장 메서드를 이용하여 인터페이스에 대한 기본 구현체를 제공하는 것이 괜찮은 방법인 것은ㅇ 분명하지만 타입을 확장하기 위한 용도로 사용하는 것은 적절하지 않다. 확장 메서드를 과도하게 사용하거나 잘못 사용하면 메서드 충돌로 인해 유지보수 비용이 급격하게 증가하는 곤경에 처할 수 있기 때문이다. 예시) Person 클래스 public sealed class Person { public string FirstName { get; set; } public.. 2023. 2. 1. [C#] Action, Predicate, Function Action .NET의 Action delegate는 하나의 파라미터를 받아들이고, 리턴 값이 없는 함수에 사용되는 Delegate 이다. 파라미터 수에 따라 0~16개의 파라미터를 받아들이는 delegate가 있다. 즉, 파라미터가 없는 Action은 Action delegate, 파라미터가 1개인 Action delegate, 2개인 Action delegate ... 이렇게 16개 파라미터가 있다. 중요한 특징은 리턴 값이 없다는 점이다. 예제 public void Run() { System.Action act = Output; act("Hello"); //무명 메서드 지정 Action act = delegate(string msg, string title) { MessageBox.Show(msg,.. 2022. 11. 15. [Effective C#] Item32 Action, Predicate, Function 과 순회 방식을 분리하라 이터레이터 메서드의 사용 예를 살피다 보면 크게 두 가지 유형이 있다. 1. 시퀀스 내의 개별 항목을 이용하여 작업을 수행하는 유형 2. 시퀀스의 순회 방식에 변경을 주는 유형(예를 들어 특정 조건에 부합하는 항목만을 가져오거나, 매 N번째 항목만을 건너뛰며 가져오는 경우) 어떤 유형의 업무라도 실제로 개별 항목에 대하여 수행해야 하는 작업의 내용과 시퀀스의 순회 방식은 서로 연관이 없으므로 분리하여 처리할 수 있다. 이 두 가지를 한 번에 수행하면 코드 간의 결합도가 높아지고 중복 코드가 발생하게 된다. Action, Predicate, Function 익명 델리게이트를 사용할 대는 function과 action이라는 두 가지 패턴이 있고 function의 특별한 형태인 predicate가 있다. pr.. 2022. 11. 15. [Effective C#] Item 31 시퀀스에 사용할 수 있는 조합 가능한 API를 작성하라. 반복 구문이 필요한 경우 주로 foreach, for, while 등이 주로 많이 사용된다. 일반적으로 반복 구문을 포함하는 메서드를 작성할때 매개변수로 컬렉션을 받아와서 컬렉션에 포함된 요소를 살펴보거나, 내용을 수정하거나, 혹은 그중 일부만 필터링해서 또 다른 컬렉션에 그 결과를 저장한 후 반환하는 식의 코드를 작성하게 된다. 이와같은 작업은 효율성에 문제가 있다. 전체 컬렉션을 대상으로 하나의 작업만을 수행하는 경우는 거의 없다. 최초 원본 컬렉션에 대해 다양한 작업을 여러 단계에 걸쳐 수행하는 경우가 대부분이다. 여러 단계를 거치는 동안 중간 결과를 저장하기 위해서 추가적으로 컬렉션(아마도 매우 큰)이 필요한 수 도 있다. 첫번째 작업을 전체 컬렉션이 모두 완료하기 전까지 두번째 작업을 시작할 수.. 2022. 11. 7. 이전 1 ··· 4 5 6 7 8 9 10 ··· 15 다음 반응형