반응형 C#/Effective C#35 [Effective C#] Item17 표준 Dispose 패턴을 구현하라 이번 포스팅은 메모리가 아닌 다른 유형의 비관리(Unmanaged) 리소스를 포함하는 타입을 작성할 때 리소스 관리를 어떻게 해야 할지를 살펴보는 파트다. 우선 간단하게 비관리 리소스가 무엇인지 살펴보자. 비관리 리소스 : 메모리가 아닌 자원을 말하며, 윈도우 핸들, 파일 핸들, 소켓 핸들 등 시스템 자원을 뜻한다. 반대로 관리 리소스에는 new List()등, 메모리 처럼 쓰는 자원을 말한다. 이런 비관리 리소스들은 가비지 콜렉터가 아닌 개발자가 직접 관리해줘야 한다. 이미 .NET 프레임 워크에는 비관리 리소스를 정리하는 표준화 된 패턴을 사용하고 있다. 그것이 바로 Dispose 패턴이다. Dispose 패턴 왜 사용해야 되냐? 우선 Dispose 패턴은 앞서 말했듯 비관리 리소스를 관리하기 위한 .. 2022. 9. 13. [Effective C#] Item16 생성자 내에서는 절대로 가상함수를 호출하지 마라. 객체가 완전히 생성되기전에 가상함수를 호출하면 이상동작을 일으킨다. 어떤 타입이든 생성자가 수행을 완료하기 전에는객체가 와전히 생성되었다고 할 수 어ㅃㅅ으므로 생성자 내에서 가상함수를 호출하면 개발자의 예상과는 다르게 코드가 흘러갈 수 있다. class B { protected B() { VFunc(); } protected virtual void VFunc()//가상함수 { Console.WriteLine("VFunc in B"); } } class Derived : B { private readonly string msg = "Set by Initializer"; public Derived(string msg) { this.msg = msg; } protected override void VFunc(.. 2022. 8. 30. [Effective C#] Item15 불필요한 객체를 만들지 마라 모든 참조 타입의 객체는 지역 변수라도 동적으로 메모리를 할당하는데 일허게 할당된 객체는 이 객체를 참조하는 상위 멤버가 삭제되면 가비지가 된다. 힙에서 새로운 객체를 생성하고 삭제하는 작업은 생각보다 많은 프로세서시간을 사용하기때문에 성능에 문제를 초래할 수 있다. 참조 타입의 지역변수를 멤버변수로 선언 자주 호출되는 이벤트 핸들러에 참조 타입의 객체를 지역변수로 선언하면 가비지 콜렉터가 많은 생성/ 제거를 반복하여 성능에 문제가 발생한다. public class FirstControl : Control { public FirstControl() {} protected override void OnPaint(PaintEventArgs e) { //나쁜 예, Point 이벤트가 발생할 때 마다 동일한 폰.. 2022. 7. 13. [Effective C#] Item14 초기화 코드가 중복되는것을최소화 하라. 초기화 코드가 중복되는것을 최소화 하라. 다른 생성자를 화출하여 초기화 과정의 일부를 위임 공통으로사용하는 생성자를 다른 생성자에서 호출하여 변수에 대한 중복 초기화 코드를 제거 public class Myclass { private List coll; //데이터 컬렉션 private string name //인스턴스 변수 public Myclass() : this(0,""){} public Myclass(int count) : this(count, string.Empty){} public Myclass(int count, string name) { coll = (count > 0) ? new List(count) : new List(); this.name = name; } } 다른 생성자를 호출하여 초.. 2022. 7. 8. 이전 1 ··· 5 6 7 8 9 다음 반응형