본문 바로가기
반응형

Effectiv C#3

[Effective C#] Item 31 시퀀스에 사용할 수 있는 조합 가능한 API를 작성하라. 반복 구문이 필요한 경우 주로 foreach, for, while 등이 주로 많이 사용된다. 일반적으로 반복 구문을 포함하는 메서드를 작성할때 매개변수로 컬렉션을 받아와서 컬렉션에 포함된 요소를 살펴보거나, 내용을 수정하거나, 혹은 그중 일부만 필터링해서 또 다른 컬렉션에 그 결과를 저장한 후 반환하는 식의 코드를 작성하게 된다. 이와같은 작업은 효율성에 문제가 있다. 전체 컬렉션을 대상으로 하나의 작업만을 수행하는 경우는 거의 없다. 최초 원본 컬렉션에 대해 다양한 작업을 여러 단계에 걸쳐 수행하는 경우가 대부분이다. 여러 단계를 거치는 동안 중간 결과를 저장하기 위해서 추가적으로 컬렉션(아마도 매우 큰)이 필요한 수 도 있다. 첫번째 작업을 전체 컬렉션이 모두 완료하기 전까지 두번째 작업을 시작할 수.. 2022. 11. 7.
[Effective C#] Item 29 컬렉션을 반환하기보다 이터레이터를 반환하는 것이 낫다. 메서드를 작성하다 보면 단일의 객체를 반환하기보다 일련의 시퀀스를 반환해야 하는 경우가 더러 있다. 시퀀스를 반환하는 메서드를 작성해야 한다면 컬렉션을 반환하기 보다는 이터레이터를 반환하는 것이 더 좋다. 이터레이터를 반환하면 이를 이용하여 다양한 작업을 좀 더 수월하게 수행할 수 있기 때문이다. cf) 시퀀스(sequence) : 데이터에 순서를 붙여 나열한것 이터레이터 메서드(iterator method) 이터레이터 메서드란 호출자가 요청한 시퀀스를 생성하기 위해 yield return 문을 사용하는 메서드를 말한다. 다음은 알파벳 소문자에 대한 시퀀스를 생성하는 매우 기본적인 이터레이터 메서드의 구현 예를 나타내었다. public static IEnumerator GenerateAlphabet() .. 2022. 11. 7.
[Effective C#] Item 23 타입 매개변수에 대해 메서드 제약 조건을 설정하려면 델리게이트를 활용하라1 언뜻 보면 C#에서 제약 조건을 설정하느 방법에는 한계가 많은 것 같다. 베이스 클래스 타입이나 특정 인터페이스로 제약 조건을 설정하거나, class 타입이나 struct 타입으로 형태를 제한하거나, 매개변수가 없는 생성자를 가져야 한다는 조건 정도를 설정하는게 끝인 것 같다. 임의 static 메서드를 반드시 구현해야 한다거나 매개변수를 취하는 생성자를 반드시 구현하도록 제약 조건을 설정할 수는 없다. 제한적이지만 인터페이스를 통해서 제약 조건을 설정할 수는 있지만 추가적으로 해야 할 작업이 너무 많고 기본적인 구조도 해칠 수 있다. 이를 위해서 메서드의 원형에 부합하는 델리게이트를 작성하는 것이 좋다. 인터페이스를 이용한 메서드 제약 어떤 제네릭 클래스에 대해 타입 매개변수 T가 반드시 Add() 메.. 2022. 10. 11.
반응형