Study/C# 3

가비지 컬렉션

개요 C++에서는 메모리를 프로그래머가 관리한다.* 즉, 동적 할당된 메모리를 전부 사용했다면 시스템에 돌려줘야 한다. 이 과정에서 여러가지 실수가 많이 발생하는 데 아래와 같다. * C++11부터 스마트 포인터 라이브러리가 추가되어 모던 C++에서는 명시적 해제보다는 스마트 포인터 사용을 권장하고 있다. 메모리 누수(Memory Leak) 메모리 사용이 끝났음에도 불구하고 해제하지 않은 것이다. 이중 해제(Double Free) 이미 해제가 된 메모리임에도 불구하고 또 해제하는 것이다. 이미 해제가 된 메모리를 가리키는 포인터를 댕글링 포인터(Dangling Pointer)라 한다. 섣부른 해제(Premature Free) 아직 사용이 끝나지 않았음에도 불구하고 해제하는 것이다. 이런 불편함을 해결하기..

Study/C# 2022.02.06

공용 타입 시스템

개요 .NET에서는 여러 .NET 언어를 지원하기 위해 공용 타입 시스템(CTS; Common Type System)을 지원한다. .NET의 모든 형식은 값 타입(Value Type) 혹은 참조 타입(Reference Type)으로 구분되며 모든 타입은 기본 타입인 System.Object에서 파생된다. C#에서는 아래와 같은 계층을 가지고 있다. 값 타입 C#에서 값 타입은 구조체 / 열거형 / 그 외에 기본 제공 타입으로 구성된다. 값 타입은 아래와 같은 특징을 갖는다. 구조체를 제외한 모든 타입은 System.ValueType에서 파생된다. 스택 메모리에 직접 값이 포함된다. 다시 말해 복사가 일어난다. 상속이 불가능하다. 구조체 멤버 중에 참조 타입이 있다면 메모리 주소가 복사된다.* * 얕은 복..

Study/C# 2022.02.06

C#에 대한 이해

개요 C#은 마이크로소프트에서 개발한 객체 지향 프로그래밍 언어다. C#은 강건하고 유지보수를 위한 여러 가지 기능을 제공하는데 메모리를 자동으로 정리해주는 가비지 컬렉션, 함수형 프로그래밍을 위한 람다 식, 비동기 프로그래밍 등이 있다. .NET 아키텍처 C#과 함께 빼놓을 수 없는 것이 .NET이다. 마이크로소프트는 어떤 플랫폼이던지 언어를 동작시킬 수 있도록 공용 언어 인프라(CLI; Common Language Infrastructure)라는 사양을 발표했는데, .NET은 이 사양에 맞춰 마이크로소프트가 구현한 프로그램인 공용 언어 런타임(CLR; Common Language Runtime)과 클래스 라이브러리 세트를 말한다. C#은 이러한 .NET 위에서 동작하는 프로그래밍 언어 중에 하나다.*..

Study/C# 2022.02.05