C#/Effective C# 책 정리 범범조조 2021. 11. 30. 19:48
1. 참조 Effective C# 개정판 3판 https://docs.microsoft.com/ko-kr/dotnet/csharp/language-reference/keywords/try-catch https://stackoverflow.com/questions/444654/exceptions-vs-return-codes-do-we-lose-something-while-gaining-something-else 2. 소개 메서드가 요청된 작업을 제대로 수행할 수 없는 경우 예외를 발생시켜 실패가 발생했음을 알려야 합니다. 3. 반환 코드 반환 코드의 경우 메서드의 원형에 영향을 미칩니다. 계산의 결과를 나타내는 용도로 주로 사용되므로 오류가 발생했다는 사실 이외의 추가적인 정보를 전달하기가 어렵습니다. u..
더 읽기
C#/Effective C# 책 정리 범범조조 2021. 10. 22. 20:31
1. 참조 Effective C# 개정판 3판 2. 소개 Iterator Method 가 입력 변수로 반드시 Sequence 를 받을 필요는 없습니다. 작업을 수행하기 전에 필요한 요소를 모두 생성해서 Collection 에 저장해두는 대신 필요할 때마다 개발 요소를 생성하는 식입니다. 이 방법으로 코드를 작성하면 사용 되지 않을 요소를 미리 생성하는 것을 피할 수 있습니다. 3.1 정수값의 Sequence 생성 3.2 일반 Collection 예제 코드 using System; using System.Collections.Generic; namespace Chapter33 { class Program { static void Main(string[] args) { var result = CreateSe..
C#/Effective C# 책 정리 범범조조 2021. 10. 12. 19:50
1. 참조 https://docs.microsoft.com/ko-kr/dotnet/csharp/language-reference/keywords/yield https://docs.microsoft.com/ko-kr/dotnet/csharp/programming-guide/concepts/iterators Effective C# 개정판 3판 2. 소개 메서드를 작성하다 보면 단일의 객체를 반환하기 보다 일련의 시퀀스를 반환해야 하는 경우가 종종 있습니다. 시퀀스를 반환하는 메서드를 작성해야 한다면 컬렉션을 반환하기보다는 이터레이터를 반환하는 것이 더 좋습니다. 시퀀스(sequence) : 데이터에 순서를 붙여 나열한 것 이터레이터를 반환하면 이를 이용하여 다양한 작업을 좀 더 수월하게 수행할 수 있기 때문..
C#/Effective C# 책 정리 범범조조 2021. 8. 15. 16:56
참조 Effective C# , 빌 와그너, 김명신, 한빛미디어 https://docs.microsoft.com/ko-kr/dotnet/csharp/programming-guide/classes-and-structs/extension-methods 소개 확장 메서드를 이용하면 인터페이스에 새로운 동작을 추가할 수 있습니다. 인터페이스에는 가능한 한 최소한의 기능만을 정의하고, 확장 메서드를 세트로 함께 구현하면 손쉽게 기능을 확장할 수 있습니다. 특히 API를 추가적으로 정의하지 않고도 새로운 기능을 추가할 수 있습니다. System.Linq.Enumerable 클래스 예시 System.Linq.Enumerable 클래스가 이 기법을 활용한 대표적인 예 입니다. System.Enumerable dpsms..
C#/Effective C# 책 정리 범범조조 2021. 8. 11. 19:54
참조 Effective C# , 빌 와그너, 김명신, 한빛미디어 https://docs.microsoft.com/ko-kr/dotnet/csharp/fundamentals/types/generics 소개 제네릭을 사용하다 보면 자칫 무작정 제네릭 클래스를 만드는 습관에 빠지곤 합니다. 하지만 유틸리티 성격의 클래스를 만드는 경우에는 일반 클래스 내에 제네릭 메서드를 작성하는 편이 훨씬 좋습니다. 이번 장에서는 왜 제네릭 메서드를 작성하는게 더 좋은지? 에 대해서 알아 보려고 합니다. 제네릭 메서드를 사용해야 하는 이유 왜 제네릭 메서드로 구현하는게 좋을까요? 우선, 제네릭 클래스를 작성하면 컴파일러 입장에서는 전체 클래스에 대하여 타입 매개변수에 대한 제약 조건을 고려하여 컴파일을 해야 하지만 일반 클래..
C#/Effective C# 책 정리 범범조조 2021. 8. 7. 22:18
참조 https://docs.microsoft.com/ko-kr/dotnet/csharp/fundamentals/types/generics https://docs.microsoft.com/ko-kr/dotnet/csharp/language-reference/keywords/where-generic-type-constraint 소개 C# 제네릭에서 제약 조건을 설정하는 방법은 한계가 많은 것처럼 보입니다. 베이스 클래스 타입이나 특정 인터페이스로 제약 조건을 설정하거나, class 타입, struct 타입으로 형태를 제한 혹은 매개변수가 없는 생성자를 가져야 한다는 조건정도를 설정할 수 있는게 다입니다. 임의의 static 메서드를 반드시 구현해야 한다거나 매개변수를 취하는 생성자를 반드시 구현하도록 제약..
C#/Effective C# 책 정리 범범조조 2021. 7. 14. 00:00
1. 참조 Effective C# , 빌 와그너, 김명신, 한빛미디어 https://docs.microsoft.com/ko-kr/dotnet/csharp/programming-guide/generics/generic-classes 2. 제약조건의 2가지 역할 런타임 오류가 발생할 가능성이 있는 부분을 컴파일타임 오류로 돌릴 수 있습니다. 타입 매개변수로 사용할 수 있는 타입을 명확히 규정하여 사용자에게도 도움이 됩니다. 대부분의 경우에 타입 매개변수로 지정하는 타입이 제약 조건을 통해 요구하는 작업 외에 다른 작업을 추가로 수행할 수 있는지에 대해선 신경 쓰지 않습니다. 하지만 타입 매개변수로 지정하는 타입이 IDisposable을 구현하고 있다면 특별한 추가 작업이 반드시 필요합니다. 3. 제네틱 메서..
C#/Effective C# 책 정리 범범조조 2021. 6. 11. 21:28
1. 참조 https://docs.microsoft.com/ko-kr/dotnet/csharp/fundamentals/types/generics 2. 소개 제네릭을 활용하면 코드를 덜 작성해도 되기 때문에 매우 유용하지만 타입이나 메서드를 제너릭화하면 구체적인 타입이 주는 장점을 잃고 타입의 세부적인 특징을 고려한 최적화한 알고리즘도 사용할 수 없습니다. 만약 어떤 알고리즘이 특정 타입에 대해 더 효율적으로 동작한다고 생각되다면, 그냥 그 타입을 이용하도록 작성하는 것이 좋습니다. 제약 조건을 설정하는 방법도 있지만, 제약 조건이 항상 능사는 아닙니다. 3. 제네릭을 사용할 때 가장 좋은 조건 반복적인 소스코드가 들어 있는 경우 각각 개별 타입에 대한 고유한 특성을 고려하고, 그 특화된 기능들을 살릴수 ..
C#/Effective C# 책 정리 범범조조 2021. 6. 3. 18:36
1. 참조 Effective C# , 빌 와그너, 김명신, 한빛미디어 https://docs.microsoft.com/ko-kr/dotnet/standard/garbage-collection/implementing-dispose 2. 소개 비관리 리소스 : 메모리가 아닌 자원 을 말하며, 윈도우 핸들, 파일 핸들, 소켓 핸들 등 시스템 자원 을 뜻합니다. 반대로 관리 리소스에는 new List() 등, 메모리 처럼 쓰는 자원을 말합니다. 이런 비관리 리소스들은 가비지 콜렉터가 아닌 개발자가 직접 관리해줘야 합니다. 이미 .NET 프레임워크에는 비관리 리소스를 정리하는 표준화된 패턴을 사용하고 있습니다. 이것이 바로 Dispose 패턴 입니다. 3. Dispose 패턴 사용해야 하는 이유 Dispose 패..
C#/Effective C# 책 정리 범범조조 2021. 5. 22. 00:00
1. 참조 https://docs.microsoft.com/ko-kr/dotnet/csharp/language-reference/keywords/readonly https://docs.microsoft.com/ko-kr/dotnet/csharp/programming-guide/classes-and-structs/how-to-define-constants 2. 소개 C#에서는 컴파일타임 상수와 런타임 상수가 있습니다. 결론부터 말씀드리면 컴파일타임 상수보다는 런타임 상수를 사용하는 편이 좋습니다. 컴파일타임 상수가 약간 더 빠르긴 하더라도 성능면에서 차이가 크지 않고 런타임 상수를 사용하여 얻을 수 있는 유연성 이라는 장점은 큰 이득입니다. 그래서 컴파일타임 상수는 성능이 중요하고 상수의 값이 절대로 어떤..
C#/Effective C# 책 정리 범범조조 2021. 5. 21. 00:00
Effective C# - item 15. 불필요한 객체를 만들지 말라 1. 참조 Effective C# , 빌 와그너, 김명신, 한빛미디어 https://docs.microsoft.com/ko-kr/dotnet/desktop/winforms/controls/overriding-the-onpaint-method?view=netframeworkdesktop-4.8 https://docs.microsoft.com/ko-kr/dotnet/api/system.text.stringbuilder?view=net-5.0 2. 소개 가비지 콜렉터는 개발자를 대신해서 메모리를 훌륭히 관리하며 사용하지 않는 객체를 효율적으로 제거합니다. 하지만, 힙에서 새로운 객체를 생성하고 삭제하는 작업은 생각보다 많은 프로세서 시간을..
C#/Effective C# 책 정리 범범조조 2021. 5. 12. 00:00
참조 https://docs.microsoft.com/en-us/dotnet/api/system.formattablestring?view=net-5.0 https://docs.microsoft.com/ko-kr/dotnet/csharp/language-reference/tokens/interpolated https://docs.microsoft.com/en-us/dotnet/api/system.globalization.cultureinfo?view=net-5.0 1. FormattableString 이란? C# 6.0에서 추가된 클래스 입니다. 문자열 보간 기능('$') 을 이용하여 생성된 문자열은 단순 문자열일 수도 있지만, FormattableString 을 상속할 타입일 수도 있습니다..