개발/C# 27

[Effective C#] C# 표준 Dispose 패턴 이해하기

Implement a dispose pattern -> Link - .Net Framework 내부에서 비관리 리소스를 정리하는 표준화된 패턴 - 개발자들에게 IDisposable 인터페이스를 통해 리소스를 삭제할 수 있는 기능을 안정적으로 제공한다. - 비관리 리소스를 명시적으로 정리해야 한다는 사실을 잊거나 인지하지 못한 경우에도 finalizer를 통해 리소스가 정리될 수 있도록 해준다. 베이스 클래스에서의 작업 - 리소스를 정리하기 위해 IDisposable 인터페이스를 구현한다. - 멤버 필드로 비관리 리소스를 포함하는 경우에 한해 방어적으로 동작할 수 있도록 반드시 finalizer를 추가한다. -> 사용자가 Dispose()메서드를 항상 올바르게 호출할 것이라고 가정할 수 없다. 비관리 리소..

개발/C# 2021.01.02

[Effective C#] C# 정적 클래스 멤버 초기화 유의사항

정적 멤버 변수를 포함하는 타입이 있다면 인스턴스를 생성하기 전 반드시 정적 멤버 변수를 초기화 하여야한다. C#에선 '정적 멤버 초기화'와 '정적 생성자' 두가지를 제공한다. * 정적 변수를 초기화하기 위해 인스턴스 생성자나 전용의 private 메서드 혹은 다른 관용구를 사용해서는 안된다. 정적 멤버 초기화 - 인스턴스 멤버 초기화와 마찬가지로 정적 멤버를 간단히 초기화하는 경우라면 정적 생상자보단 멤버 초기화 구문을 사용하는 것이 좋다. - 정적 생성자가 호출되기 이전에 실행되며, 베이스 클래스의 정적 생성자보다도 먼저 호출된다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 public class MySingleton { private static reado..

개발/C# 2020.12.31

[Effective C#]C# 멤버 초기화 - 할당 구문보다 멤버 초기화를 사용한다.

할당 구문보다 멤버 초기화(member initializer) 구문 사용 - 생성자가 여러개인 경우, 멤버 변수 초기화를 누락하여 사용할 수 있다. 멤버초기화는 이러한 누락을 방지할 수 있다. 1 2 3 4 5 6 public class MyClass { //컬렉션을 선언하는 동시에 초기화 private List labels = new List(); } Colored by Color Scripter cs 이와 같은 코드는 MyClass 타입에 몇개의 생성자가 추가되든 올바른 초기화를 사용할 수 있다. * 컴파일러는 모든 생성자의 시작 부분에 멤버 초기화 구문을 포함시킨다. 새로운 생성자가 추가되거나 사용자가 생성자를 선언하지 않아 기본 생성자가 만들어진 경우에도, 항상 생성자가 실행되기 전 멤버 초기화 ..

개발/C# 2020.12.30

[Effective C#] C# 가비지 컬렉터(Garbage Collector) 기초 / finalizer 이해하기

가비지 컬렉터(Garbage Collector, GC) 자동 메모리 관리자, 애플리케이션의 메모리 할당 및 해제를 관리한다. 즉 개발자는 메모리 관리를 위한 코드를 작성할 필요가 없다. 메모리 누수, 댕글링 포인터(dangling pointer), 초기화 되지 않은 포인터 등의 기타 메모리 관련 문제를 개발자가 직접 다루지 않게 된다. * dangling pointer : 유효한 곳을 가르키고 있지 않는 포인터 -관리되지 않는 리소스(Unmanaged Resource, 비관리 리소스)의 경우엔 개발자가 직접 관리해야 하며, 이벤트 핸들러, 델리게이트 등도 잘못 사용하면 이를 참조하고 있는 객체가 불필요하게 메모리에 남게 되므로 사용에 유의해야 한다. ->그럼에도 Garbage Collector가 메모리를..

개발/C# 2020.12.28

C# 델리게이트와 이벤트

mrw0119.tistory.com/19 5장. 델리게이트 (Delegate) - 콜백, 체인 1. 델리게이트 (Delegate) 해석하면 '대리인'이라는 뜻의 델리게이트는 메소드를 참조하는 변수이다. C++의 함수 포인터와 비슷하기 때문에 C++을 공부한 사람이라면 어렵지 않게 이해하겠지만, 그 mrw0119.tistory.com blog.hexabrain.net/151 C# 강좌 19편. 델리게이트와 이벤트(Delegates and Events) 1. 델리게이트(Delegate) 오늘은 델리게이트(Delegate)에 대해서 알아보려고 합니다. 델리게이트는 한마디로 말해서 대리자라고 말할 수 있습니다. 즉, 대신 일을 해주는 녀석이라고 할 수 있겠죠? 다 blog.hexabrain.net

개발/C# 2020.11.29

XAML(Extensible Application Markup Language)

XAML(Extensible Application Markup Language) - MS에서 개발한 XML 기반 마크업(Markup) 언어 * 마크업(Markup) 언어 : 태그를 이용하여 문서나 데이터 구조를 명시하는 언어 - WPF, WF에서 널리 쓰이며 UI의 요소, 데이터 바인딩, 이벤트, 애니메이션 등의 기능을 제공한다. - MVVM 아키텍쳐 사용에 적합 * XAML 사용의 장점 - 프로그래밍 코드보다 읽기 쉽고 이해하기 쉽다. - Interface의 부모-자식 구조 파악이 쉽다. - 시각적 도구를 이용해 생성/수정이 가능하다. * XAML 사용의 단점 - 코드를 포함할 수 없다. - 반복적인 처리를 위한 루프를 포함할 수 없다. 그러나 대부분 시각적 객체는 ListView기반으로 여러 Chil..

개발/C# 2020.11.21
반응형