C#/Effective C# 책 정리 범범조조 2023. 2. 25. 01:03
참조 참고 사이트 1. 소개 C# 3.0 부터 메서드 범위에서 선언된 변수에 암시적 형식 var 를 사용할 수 있습니다. 암시적 형식 지역 변수는 형식을 직접 선언하는 것처럼 강력한 형식이지만 컴파일러가 형식을 결정합니다. Effective C# 에서는 개발자가 코딩 할 때, 지역변수를 선언할 시 var 사용을 권장합니다. 2. var 사용 예제 var는 암시적 타입 지역변수(implicitly typed local variable) 입니다. var는 데이터 타입을 개발자가 아닌 컴파일러(Compiler) 가 결정합니다. 다음은 var 로 지역변수를 선언한 예제 코드입니다. 아래 예제에서 var idx의 값은 int형 정수 10으로 설정됨으로 컴파일러에 의해 int형으로 타입이 결정됩니다. var idx..
더 읽기
C#/Effective C# 책 정리 범범조조 2023. 2. 24. 05:02
참조 참고 사이트 참고 사이트 1. C# 에서의 형변환 C# 에서 형변환을 수행하는 방법에는 is/as 연산자 를 사용하는 방법과 컴파일러의 cast 연산자 구문을 사용하는 두 가지 방법 이 있습니다. 안정적인 코드를 작성하려는 경우, 우선 is 연산자로 형변환 유무 확인 후 실제 형변환을 수행하도록 코드를 작성할 수도 있습니다. 1.1. as 형변환 예제 object o = Factory.GetObject(); // as 변환 MyType t = o as MyType; if (t != null) { //MyType 타입의 t 객체 사용 } else { //형변환 실패 시 } 1.2. cast 연산자 예제 object o = Factory.GetObject(); // cast 변환 try { MyType..
C#/Effective C# 책 정리 범범조조 2023. 2. 24. 03:01
참조 참고 사이트 참고 사이트 참고 사이트 1. FormattableString 이란? C# 6.0에서 추가된 클래스 입니다. 문자열 보간 기능('$') 을 이용하여 생성된 문자열은 단순 문자열일 수도 있지만, FormattableString 을 상속할 타입일 수도 있습니다. FormattableString 은 문자열의 연결을 돕는 기능이 있어, 문화권과 언어를 지정하여 문자열을 생성하는데 활용할 수 있습니다. 아래 예제에서 var로 선언하면 변수 vs는 string 객체가 될 수도 있겠지만, FormattableString을 상속한 타입의 객체가 될 수도 있습니다. string s = $"It's the {DateTime.Now.Day} of the {DateTime.Now.Mon..
C#/Effective C# 책 정리 범범조조 2023. 2. 23. 21:00
참조 참고 사이트 참고 사이트 참고 사이트 참고 사이트 1. 콜백(Call-Back)이란? 아빠 : "찬우야, 아빠가 책 읽는 동안 마당의 잔디를 깎아주렴." 아들 : "아빠, 우선 마당 청소를 했어요." 아들 : "아빠, 잔디깎기에 기름을 넣었어요." 아들 : "아빠, 잔디깎기가 동작하지 않아요." 아빠 : "그래 내가 동작시켜볼게." 아들 : "아빠, 다 했어요." 위의 간단한 대화는 콜백(Call-Back) 을 설명하기 위한 대화입니다. 아빠는 아들에게 일을 시켰고, 아들은 수차례에 걸쳐 아빠에게 상태 보고를 합니다. 아빠는 상태를 확인하기 위해 잠깐씩 책을 읽는 것을 멈추긴 했지만, 책 읽기를 완전히 중단한 채로 아들이 일을 마치기를 기다리지는 않습니다. 아들은 중요하다고 생각하는 상태를 아빠에게..
C#/Effective C# 책 정리 범범조조 2023. 2. 23. 17:59
1. 참조 참고 사이트 참고 사이트 2. 소개 Value 타입은 주로 값을 저장할 때 쓰는 저장소이며 다형적이지 못합니다. System.Object는 .NET 프레임워크에서 모든 타입의 최상위 타입으로 정의하고 있는데 언뜻 보면 Value 타입과 System.Object는 양립하지 못하는 것처럼 보입니다. 하지만 .NET 프레임워크는 박싱(Boxing) 과 언박싱(UnBoxing) 이라는 방법을 통해서 두 타입을 서로 변환하게 해줍니다. 3. 값 타입(Value Type) 값 타입(Value Type) 은 스택영역 에 저장합니다. (int, char, double...) 값 타입은 Object를 상속받은 System.ValueType을 상속받은 구조체입니다. (System.ValueType) int ->..
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. 제네틱 메서..