C# Study/이펙티브 C# 맨텀 2021. 4. 25. 14:29
다음 본문은 도서 이펙티브 C# (빌 와그너)에서 나오는 주제를 다룹니다. 할당 구문 - 생성자 본문에서 멤버 변수의 값을 할당하는 것을 말한다. - 생성자가 여러개일 경우 누락의 우려가 있다. public class MyClass() { List names; public MyClass() { names = new List(); } } 멤버 초기화 구문 - 멤버 초기화 구문에 의해 생성된 코드는 생성자 본문 앞에 덧붙여진다. - 모든 생성자가 객체 생성 방법이 동일한 경우에 사용하면 좋다. public class MyClass() { List names = new List(); } 멤버 초기화 구문을 사용하지 말아야하는 경우 1) 객체를 0이나 null로 초기화 하는 경우 - 기본 시스템 초기화 루틴은 ..
C# Study/이펙티브 C# 맨텀 2021. 4. 25. 13:37
다음 본문은 도서 이펙티브 C# (빌 와그너)에서 나오는 주제를 다룹니다. 2021.04.13 - [기술 면접용 질문들/운영체제 관련] - 가비지 컬렉션(Garbage Collection) 가비지 콜렉터 - 메모리 누수, 유효한 객체를 가리키고 있지 않은 포인터, 초기화되지 않는 포인터 등의 문제를 자동화해준다. - 메모리를 신경 쓸 필요가 없어지기 때문에 프로그램 구조를 단순하게 유지할 수 있다. - 응용 프로그램 내의 최상위 객체로부터 참조 트리를 구성하여 도달 불가능한 객체를 가비지로 간주한다. 콤팩트 작업 - 사용중인 객체들을 옮겨 조각단 가용 메모리를 단일의 큰 메모리 공간으로 만드는 과정 비관리 리소스 - 힙에 대한 메모리 관리는 가비지 수집기가 책임을 지지만, 비관리 리소스는 여전히 개발자가..
C# Study/이펙티브 C# 맨텀 2021. 4. 23. 19:01
다음 본문은 도서 이펙티브 C# (빌 와그너)에서 나오는 주제를 다룹니다. 멤버 재정의하기 - 상속 관계에서 메서드를 재정의 할 때는 virtual과 override키워드를 사용한다. - virtual로 선언하지 않은 멤버를 재 정의하려는 경우 new한정자를 사용할 수 있다. pulbic class MyWidget : BaseWidget { public new void MyMethod() { // 내용 base.NormalizeValues(); // 베이스 클래스를 호출하여 상속처럼 사용할 수 도 있다. } } new로 재정의... 할수는 있지만? - 개발자로 하여금 클래스 동작의 일관성이 없어지기때문에, 혼란을 초래한다. - 베이스 클래스가 사용하고 있는 메서드를 재정의하여 완전히 새로운 베이스 클래스..
C# Study/이펙티브 C# 맨텀 2021. 4. 23. 18:42
다음 본문은 도서 이펙티브 C# (빌 와그너)에서 나오는 주제를 다룹니다. 2021.04.12 - [기술 면접용 질문들/프로그래밍 관련] - 박싱(Boxing) vs 언박싱(Unboxing) 박싱 & 언박싱 - 값 타입을 참조타입으로 변경(박싱), 참조 타입을 값 타입으로 변경(언박싱)하는 것을 말한다. - 박싱과 언박싱을 수행하는 과정에서 복사가 일어나 임시 객체가 생성되기도 하며, 불필요한 가비지가 남아 성능에 좋지않은 영향을 미친다. - 대부분 .NET 2.0에 추가된 제네릭 클래스와 메서드를 사용하면 박싱과 언박싱을 피할 수 있다. 대표적인 박싱 예 : 보간문자열 - 보간문자열은 내부적으로 System.Object 객체에 대한 배열로 인자를 받는다. - 때문에 값 타입인 number 변수를 Sys..
C# Study/이펙티브 C# 맨텀 2021. 4. 23. 17:41
다음 본문은 도서 이펙티브 C# (빌 와그너)에서 나오는 주제를 다룹니다. 이벤트의 null 예외 이벤트를 호출하였을때, 결합된 이벤트 핸들러가 없다면 nullReference 예외가 발생한다. 때문에 예전에는 다음과 같은 방식으로 코드를 작성하였다. public void Test() { if(MyEvent != null) MyEvent(this, counter); } 그런데 이벤트를 발생시키는 코드를 수행하기 직전에 다른 쓰레드가 이벤트 핸들러의 등록을 취소한다면 이벤트 핸들러는 null 예외를 발생시킬 것이다. (재현도 어렵고 극단적인 케이스기는 하다) 이 때문에 멀티스레드 환경에서는 다음과 같은 코드로 오류를 방지했다. public void Test() { var tempHandler = MyEve..
C# Study/이펙티브 C# 맨텀 2021. 4. 23. 17:22
다음 본문은 도서 이펙티브 C# (빌 와그너)에서 나오는 주제를 다룹니다. 델리게이트의 장점 - 타입 안정적인 콜백을 정의할 수 있다. - 클래스 간 상호 통신을 수행해야 할 때 클래스의 결합도를 낮출 수 있다. - 런타임에서 통지 대상을 설정할 수 있고, 다수의 클라이언트에게 통지를 보낼 수도 있다. (하나의 델리게이트는 여러 메서드를 참조할 수 있다) .NET Framework 라이브러리는 Predicate , Action, Func으로 델리게이트를 정의해두었다. Predicate 반환형이 bool인 델리게이트. Func과 동일하다. Func 매개변수가 여러 개이며, 반환 값을 가지고 있다. Action 매개변수가 여러 개지만 반환 타입이 void이다. 멀티캐스트 델리게이트 - 델리게이트에 복수의 메..