본문 바로가기
반응형

C#/Effective C#35

[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.
[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.
[Effective C#] Item 30 루프보다 쿼리 구문이 낫다. C#은 다양한 반복 구문을 제공하기 때문에 일상적인 개발에는 전혀 지장이 없다. 하지만 쿼리 구문을 사용하는 것이 반복문을 사용하는 것보다 좋은 경우가 꽤 있다. 쿼리 구문의 장점 1. 프로그램의 논리를 명령형 방식에서 선언적인 방식으로 전환할 수 있다. 2. 질의의 내용을 구성할 수 있을 뿐 아니라 개별 항목에 대해 수행하려는 작업의 수행 시기를 연기할 수 있다. 3. 사용자의 의도를 더 명확하게 드러낼 수 있다. 예시 1) 0부터 99가지의 수에 대해 (X, Y) 좌표 객체를 생성 1-1) 루프 var foo = new int[100]; for (var num = 0; num < foo.Length; numm++) foo[num] = num * num; foreach (int i in foo) e.W.. 2022. 11. 7.
반응형