C# Study/이펙티브 C# 맨텀 2021. 4. 22. 18:51
다음 본문은 도서 이펙티브 C# (빌 와그너)에서 나오는 주제를 다룹니다. 이벤트로 인자 전달에서 사용 - 일반적으로 속성에 인자로 이름 자체를 전달하는 경우가 많기 때문에, nameof()를 사용하여 전달할 수 있다. public string Name { get => name; set { if(value != name) { name = value; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Name)); } } } 오류 처리등에서 사용 - 특정 변수가 null일 때 디버깅 로그를 남기는 등의 작업을 할 때, 변수의 이름을 하드코딩으로 적는 경우 변수 이름이 바뀌는 상황에 대처할 수 없다. int? myScore = null; i..
C# Study/이펙티브 C# 맨텀 2021. 4. 22. 17:50
다음 본문은 도서 이펙티브 C# (빌 와그너)에서 나오는 주제를 다룹니다. 로컬라이징을 경험해본 사람이라면 알겠지만, 국가권에 따라서 사용하는 특수문자나 표기 형식이 다른 경우가 존재한다. 이를 해결하기 위해 FormattableString이라는 것이 존재한다! 문자열 보간 기능의 반환형은? - string이 될 수도 있고, FormattableString이 될 수도 있다. string first = $"It's the {Data.Now.Day}"; FormattableString second = $"It's the {Data.Now.Day}"; - var를 사용하는 경우 반환 객체 오른쪽에 '.'을 사용하는 경우라면 문자열을 생성한다. FormattableString 타입 객체 - Formattable..
C# Study/이펙티브 C# 맨텀 2021. 4. 22. 17:32
다음 본문은 도서 이펙티브 C# (빌 와그너)에서 나오는 주제를 다룹니다. string.Format() - 포맷 문자열과 인자 리스트가 분리되어 전달되기 때문에 형태를 짐작하기 어렵다. - 포맷 문자열의 인자의 개수와 실제 전달되는 인자의 개수를 확인하지 않기에 실수가 발생할 여지가 있다. 문자열 보간의 동작 방식 - 내부적으로는 param을 이용하여 object배열을 전달하는 기존 포매팅 함수를 호출한다. - 때문에 박싱이 수행되기 때문에 루프 내에서 사용된다면 성능에 영향을 준다. Console.WriteLine($"값은 : {Math.PI}"); // double -> object 로 박싱이 일어난다. - 아래와 같이 미리 문자열로 변환하여 박싱을 방지할 수도 있다. Console.WriteLine..
C# Study/이펙티브 C# 맨텀 2021. 4. 22. 17:02
다음 본문은 도서 이펙티브 C# (빌 와그너)에서 나오는 주제를 다룹니다. as를 사용한 객체 사용 - as는 형 변환을 수행할 수 없거나, null을 대상으로 형 변환을 수행하는 경우 null을 반환한다. - null처리만 해주면 된다. object o = Factory.GetObject(); MyType t = o as MyType; if(t != null) { // 객체 사용 } else { // 오류 보고 } 캐스트 연산자를 사용한 객체 사용 - 형변환을 수행할 수 없다면 오류가 발생한다. - null은 어떠한 참조값으로도 변환될 수 있기 때문에 null 처리도 별도로 수행해야 한다. object o = Factory.GetObject(); try { MyType t; t = (MyType)o; ..
C# Study/이펙티브 C# 맨텀 2021. 4. 22. 15:44
다음 본문은 도서 이펙티브 C# (빌 와그너)에서 나오는 주제를 다룹니다. const와 readonly의 공통점 - 두 키워드 모두 한번 값을 정한 뒤, 변경할 수 없게 하는 기능을 가지고 있다. public const int myConst = 1000; public static readonly int myRead = 2000; 컴파일타임 상수 const - 컴파일 타임에 변수가 값으로 대체된다. - 내장된 숫자형, enum, 문자열, null에 대해서만 사용할 수 있다. - 변수 선언과 동시에 할당하며, 변경할 수 없다. (때문에 반드시 모든 클래스의 인스턴스가 동일한 값을 가진다) 런타임 상수 readonly - 런타임에 값이 평가된다. 상수에 대한 참조로 컴파일 된다. - 모든 타입에 대해 사용할 ..
C# Study/이펙티브 C# 맨텀 2021. 4. 20. 20:20
다음 본문은 도서 이펙티브 C# (빌 와그너)에서 나오는 주제를 다룹니다. var란? -변수의 타입을 명시적으로 선언하지 않고, 컴파일러가 타입을 추론하도록 맡기는 키워드. var는 동적 타이핑이 아니라 타입 추론이다. - dynamic의 경우 나중에서야 변수의 타입이 결정된다. - 하지만 var는 dynamic과 달리 동적으로 타입이 결정되는 것이 아니라 타입을 추론할 뿐이다. 지역변수를 선언할 때는 var를 사용하는 편이 낫다. - 코드를 읽을 때 정확한 타입이 기술된 것 보다 타입을 유추할 수 있는 명시적 변수 이름이 더 도움이 된다. - 변수 타입을 명시적으로 지정할 때 타입 안정성이 향상되는 것이 아니다. var와 숫자타입을 같이 사용하면 정밀도 문제가 발생할 수 있다 - 아래의 예제에서 Get..