반응형 C#52 [Effective C# Item 33] 필요한 시점에 필요한 요소를 생성하라 이터레이터 메서드가 입력 변수로 반드시 시퀀스를 받을 필요는 ㅇ벗다. 이터레이터 메서드를 구현할 때 새로운 시퀀스를 출력하기 위해 yield return을 자주 사용하는데 이 과정에서 입력 시퀀스를 활용하는 대신 새로운 팩토리 메서드를 이용할 수도 있다. 작업을 수행하기 전에 필요한 요소를 모두 생성해서 컬렉션에 저장해두는 대신 필요할 때마다 개발 요소를 생성하는 식이다. 이 방법으로 코드를 작성하면 사용되지 않을 요소를 미리 생성하는 것을 피할 수 있다. 1. 정숫값의 시퀀스 생성 static IList CreateSequence(int numberOfElements, int startAt, int stepBy) { var collection = new List(numberOfElements); for.. 2022. 12. 12. [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 ··· 3 4 5 6 7 8 9 ··· 13 다음 반응형