본문 바로가기
반응형

책/Effective C#32

Effective C# - Item31 시퀀스에 사용할 수 있는 조합 가능한 API를 작성하라 반복 구문이 필요한 경우 단일 요소를 처리하기보다 여러 요소로 구성된 시퀀스를 처리하는 알고리즘을 작성하기 위한 경우가 대부분이다. 반복 구문으로 작업을 진행하는 경우 효율성에 문제가 있다. 전체 컬렉션을 대상으로 단 하나의 작업만을 수행하는 경우는 거의 없고 최초 원본 컬렉션에 대해 다양한 작업을 여러 단계를 걸쳐 수행한 후에야 비로소 원하는 결과를 얻을 수 있는 경우가 대부분이기 때문이다. 대안 개별 요소에 대해 수행해야 하는 모든 작업을 분리된 메서드로 작성한 후 루프 내에서 이 메서드를 호출하는 방법이 있다. 이렇게 코드를 작성하면 메서드의 재사용 가능성이 낮아진다. 여러 단계의 작업을 단번에 수행하도록 작성된 메서드보다 각각의 작업을 개별적으로 수행하는 메서드들이 재사용 가능성이 훨씬 높기 때문.. 2024. 3. 8.
Effective C# - Item 30 루프보다 쿼리 구문이 낫다 for, while, do/while, foreach등의 다양한 반복 구문이 있는데 이는 일상적인 개발에는 부족함이 없다. 하지만 쿼리 구문을 사용하는 것이 반복문을 사용하는 것보다 더 나은 경우가 있다. 쿼리 구문을 사용할시 장점 LINQ의 지연 실행(Lazy Evaluation) 쿼리 구문을 이용하면 질의의 내용을 구성할 수 있을 뿐 아니라 개별 항목에 대해 수행하려는 작업의 수행 시키를 연기할 수 있다. 쿼리 구문이나 메서드 호출 구문 중 어떤 방식을 쓰더라도 이러한 장점은 동일하다. 그러므로 쿼리가 정의된 시점에서는 실제로 데이터가 계산되지 않고 필요한 시점에서만 연산이 수행된다. 이에 따라 메모리와 성능을 효율적으로 관리할 수 있게 해준다. 가독성 및 유지 보수성 쿼리 구문이나 메서드 호출 구문.. 2024. 3. 7.
Effective C# - Item 29 컬렉션을 반환하기보다 이터레이터를 반환하는 것이 낫다 메서드를 작성하다 보면 단일의 객체를 반환하기보다 일련의 시퀀스를 반환해야 하는 경우가 종종 있다. 시퀀스를 반환하는 메서드를 작성해야 한다면 컬렉션을 반환하기보다는 이터레이터를 반환하는 것이 좋다. 01 컬렉션을 반환하는 메서드 public static List GetEvenNumbers(int n) { List evenNumbers = new List(); for (int i = 1; i 2024. 2. 2.
Effective C# - Item 28 확장 메서드를 이용하여 구체화된 제네릭 타입을 개선하라 기존에 사용중인 컬렉션 타입에 영향을 주지 않으면서 새로운 기능을 추가하고 싶다면 구체화된 컬렉션 타입에 대해 확장 메서드를 작성하면 된다. public class Customer { public string Name { get; set; } } 확장 메서드를 사용하지 않는 경우 public class CustormerList : List { public void SendEmailCoupons(Coupon speicalOffer); public static IEnumerable LostProspects(); } 확장 메서드는 IEnumerable를 기반으로 작성됐지만 파생 클래스에서 메서드를 추가하는 방식은 List를 기반으로 한다. List는 IEnumerable를 상속받고 있기 때문에 LINQ와 같은.. 2024. 1. 20.
Effective C# - Item 27 인터페이스는 간략히 정의하고 기능의 확장은 확장메서드를 사용하라 확장 메서드를 이용하면 인터페이스에 새로운 동작을 추가할 수 있다. 인터페이스에는 가능한 최소한의 기능만을 정의하고 확장 메서드를 세트로 함께 구현하면 손쉽게 기능을 확장할 수 있다. 특히 API를 추가적으로 정의하지 않고도 새로운 기능을 추가할 수 있다. 확장메서드(Extention Method) 정적 클래스에 속해 있는 정적 메서드로 해당 클래스의 인스턴스가 마치 자신의 멤버인 것처럼 사용할 수 있다. C#에서는 확장 메서드를 정의할 때 정적 클래스에 정적메서드로 작성하고 첫번째 매개변수에 this키워드를 사용하여 어떤 형식에 대한 확장 메서드인지 나타낸다. ex) System.Linq.Enumerable클래스에는 IEnumerable에대해 정의된 50개 이상의 확장메서드(Where,Orderby,T.. 2024. 1. 19.
Effective C# - Item 26 제네릭 인터페이스와 논제네릭 인터페이스를 함께 구현하라 C#에 제네릭이 포함되기 이전에 개발됐던 코드를 무시할 수 있으면 좋겠지만 이전 코드를 무시하기가 어렵다. 새로운 라이브러리를 개발할 때 제네릭 타입뿐 아니라 고전적인 방식도 함께 지원한다면 라이브러리의 활용도를 좀 더 높일 수 있다. 만약 제네릭 타입이 아닌 방식도 지원한다면 (1) 클래스와 인터페이스 (2) public 속성 (3) serialize 대상이 되는 요소 세가지에 대해서 논제네릭 non-genric방식을 지원해야 한다. 물론 대부분의 경우 논제네릭 인터페이스를 추가하는 작업은 적절한 원형의 메서드를 추가하는 수준에서 간단히 해결된다. 아닌 경우는 서로간의 상속간계에 속해있을 경우에 발생한다.01 System.Object이용앞서 정의한 Name타입으로 CheckEquality를 호.. 2023. 12. 20.
반응형