본문 바로가기
반응형

65

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.
운영체제 - 스레드, 단일 스레드 프로세스와 멀티 스레드 프로세스, 스레드의 구성요소, 멀티프로세스와 멀티 스레드 스레드(Thread) 프로세스를 구성하는 실행의 단위이다. 조금 더 정확하게 표현하자면 스레드란 프로세스를 구성하는 실행의 흐름 단위이다. 그리고 하나의 프로세스는 하나 이상의 스레드를 가질 수 있다. 그러므로 스레드를 이용하면 하나의 프로세스에서 여러 부분을 동시에 실행할 수 있다. 단일 스레드 프로세스 실행 흐름이 하나인 프로세스이다. 즉 한의 작업만을 동시에 처리할 수 있다. 그러므로 작업이 순차적으로 진행된다. 멀티 스레드 프로세스 멀티 스레드 프로세스에서는 하나의 프로세스가 한 번에 여러 일을 동시에 처리할 수 있다. 그러므로 여러 작업이 동시에 진행될 수 있다. 스레드의 구성 요소 실행에 필요한 최소한의 정보들이다. 이를 이용해서 독립적으로 실행된다. 01 스레드 ID(Thread ID) 각 .. 2023. 12. 20.
Effective C# - Item 25 타입 매개변수로 인스턴스 필드를 만들 필요가 없다면 제네릭 메서드를 정의하라 제네릭 클래스를 정의하면 클래스 전체에 대하여 제약 조건을 고려해야한다. 제약 조건의 적용 범위가 넓어지면 넓어질수록 코드를 수정하기가 까다로워진다. 그러므로 제네릭 클래스보다 제네릭 메서드를 사용하는 것이 낫다. 1. 제네릭 클래스를 사용하는 경우 public static class Utils { public static T Max(T left, T right) => Comparer.Default.Compare(left,right) Comparer.Default.Compare(left,right) > 0 > left : right; } 제네릭 클래스를 사용하는 경우 타입 매개변수를 명시적으로 지정.. 2023. 12. 18.
Effective C# - Item 24 베이스 클래스나 인터페이스에 대해서 제네릭을 특화하지말라 제네릭 클래스나 제네릭 메서드를 작성할 때는 사용자가 가능한 안전하고 혼랍스럽지 않도록 작성해야 한다. 특히 오버로드된 메서드가 여러 개인 경우 컴파일러가 이 중 하나를 어떻게 선택하는지 정확히 알고 있어야 한다. 그리고 사용자가 명시적으로 타입을 설정한 일반 메서드보다 제네릭 메서드가 우선적으로 선택되는 경우에 대해서도 명확히 이해하고 있어야 한다. public class MyBase { } public interface IMessageWriter { void WriteMessage(); } public class MyDerived : MyBase, IMessageWriter { void IMessageWriter.WriteMessage() => Conosle.WriteLine("Inside MyDer.. 2023. 12. 18.
반응형