[C#] Garbage Collector
GC 기본사항 CLR에서 자동 메모리 관리 역할을 하기 위해 GC를 둔다 사용자는 메모리 해제 등 관리 작업을 위한 코드를 작성하지 않아도 된다 메모리 누수 및 메모리 반환, 해제된 메모리에 접근 등 문제를 해결 GC에 의해 효율적으로 메모리를 할당
GC 기본사항 CLR에서 자동 메모리 관리 역할을 하기 위해 GC를 둔다 사용자는 메모리 해제 등 관리 작업을 위한 코드를 작성하지 않아도 된다 메모리 누수 및 메모리 반환, 해제된 메모리에 접근 등 문제를 해결 GC에 의해 효율적으로 메모리를 할당
Value Type 값이 바로 할당되는 타입 직접 값을 가지고 있다 int, float, char 등이 이에 해당한다 System.ValueType으로부터 상속
Virtual Table의 구조 C#에서 모든 클래스는 System.Object 클래스에서 상속되므로 VTable을 갖는다 기본적으로 ToString, Equals, GetHashCode, Finalize 메서드를 VTable에 갖는다 Base클래스가 가상 메서드가 없다면 이외의 메서드들은 VTable Slo...
추상적 자료형 ADT 자료 자체의 형태와 연산을 수학적으로만 정의한 것
Value type이면 모두 stack에 저장된다? Value type은 stack에 저장될 수 있다 항상 stack에 저장되는 것은 아니다 프로그래머는 특정 객체에 대해 stack에 저장되는지 heap에 저장되는지를 알아야할 필요가 있었다 사용자에게 노출되지 않은 상태로 메모리를 관리하는...
닷넷 프레임워크
Struct 값 타입 allocation 및 deallocation 시 참조 타입보다 소요가 적다 stack에 저장 nested struct 구조인 경우 inline member들은 private by default
string vs String
값 형식 vs. 참조 형식
Difference between Array, ArrayList, List Array
static const in C++
예시 case 1
readonly vs. const
동적 형식 dynamic 변수 및 해당 멤버에 대한 참조 사용에 대한 컴파일 타임 검사를 패싱 런타임에서 확인 대부분의 상황에서 object 처럼 동작 그러나 컴파일러가 형식을 검사하지 않은 상태 컴파일 타임을 거치며 object 타입으로 변환 런타임에서 dynamic...
Event 한 object에 의해 어떤 action이 발생했음을 알리는 notification .NET에서는 observer design pattern을 사용
TryGetValue vs. ContainsKey? ```csharp // key가 있는지 체크 public bool ContainsKey(TKey key) { return (this.FindEntry(key) >= 0); }
default 연산자 default 키워드는 해당 변수 타입의 기본 또는 빈 상태를 반환 참조 형식(class, delegate, …)의 default 값: null 값 형식 (struct, enum, …)의 default 값: all-zeroes value int 0, DateTime 0001-01-01 00:00:0...
Managed vs. Unmanaged Code Unmanaged code란 컴퓨터 구조, 프로세서에 특화되어 그에 의존하는 코드 C#에서는 unsafe 키워드를 이용하는 코드 프로그래머에 의해 직접 관리 Managed code란 .NET 프레임워크에서 구동하는 C# 코드 자체 ...
lock 키워드 개체에 대한 뮤텍스를 획득하고 signal과 unlock을 실행
sealed 키워드 클래스에 적용된 경우 다른 클래스가 해당 클래스에서 상속하는 것을 막음
C# 포인터 C# 대부분의 코드는 확인할 수 있는 안전한 코드 .Net 도구에서 코드가 안전한지 확인 가능 원시 메모리를 할당하지 않고, 포인터로 직접 메모리에 엑세스하지 않음 경우에 따라 앱의 성능을 향상 포인터가 필요한 네이티브 함수를 호출하는 경우 필수 보안 및 안전성 이슈 발생...
Job System
동기와 비동기 동기 어떤 operation을 실행시켰을 때 결과값이 도출될 때까지 프로그램은 멈춰서 기다려야 함 비동기 언제 값이 도출될 지 보장할 수 없고, 그 동안 프로그램은 다른 프로세스를 진행할 수 있음 async / await는 위 중 비동기 프로그래밍을 위해 사...
확장 메서드란 기존 제공되는 클래스/구조체/인터페이스의 구현을 직접 변경하지 않고 기능을 확장해 사용 기존 데이터 타입 (int, float 등)의 class에도 적용 가능
물음표 연산자 두개가 연속적으로 쓰이는 예시
Property 정보은닉을 더 간결하고 간단하게 구현하도록 허용 get / set 메서드를 대신해 가독성을 보완
partial 키워드 C#에서는 C/C++와 달리 cs 파일 하나에 클래스 선언과 정의가 작성 클래스가 커질 경우 가독성이 떨어짐 Partial 키워드를 제공함으로써 여러 파일에 하나의 클래스를 작성하도록 허용 대리자(delegate) 또는 열거형(enum) 선언을 할 때 partial 한정자를 사용할 수 없음 ```csharp /...
byte와 char의 사이즈 byte: 1바이트 숫자 자료형 char: 2바이트 문자 자료형 1바이트 아님! 대부분의 .Net 언어의 문자열은 유니코드 utf-16을 디폴트로 지원
in 키워드 in 매개변수로 전달되는 변수는 메서드로 전달되기 전 반드시 초기화 인수가 참조로 전달되지만, 수정되지 않음 오버로딩 규칙 ```csharp class InOverloads { // 오버로딩 허용 public void SampleMethod(in int i) { } public void SampleMeth...
var 암시적 형식 컴파일러가 compile time에 자료형을 결정 제약 조건 지역 변수에만 사용 가능 변수 선언과 함께 초기화 필수 null / 익명 메서드 / 메서드 그룹으로 초기화 불가
Dictionary의 종류 Dictionary Key와 Value의 Pair를 갖는 자료구조 Generic 해시테이블 구조를 사용
리플렉션의 개념 일반적으로는 클래스를 통해 객체를 생성 사용자(프로그래머)는 클래스의 필드와 메서드를 알고 있고, 사용하는 데 불편함이 없다
as와 is 형변환을 위한 예약어 개발자에 의해서 의도적으로 downcasting하도록 도와주는 연산자 downcasting 베이스 클래스가 파생 클래스로 캐스팅 되는 것 upcasting 파생 클래스가 베이스 클래스로 캐스팅 되는 것
where 키워드 사용 예시
메서드에 선언된 new modifier base class의 메서드를 숨김 upcasting 하여 base class의 메서드를 사용할 수 있으나 이는 의도된 디자인에 반하는 행위이므로 위험
delegate(대리자) 키워드 delegate는 메서드를 다른 메서드에 인수로 전달하는 데 사용 형식이 일치하는 구조의 모든 메서드는 대리자에 할당할 수 있다 메서드는 정적/인스턴스일 수 있다. delegate 속성 함수 포인터와 유사하지만, 객체 지향적으로 인스턴스 및 메서드를 캡슐화한다. 메서드를 매개 변수로 전달할 수 ...
interface 특정 메서드들의 조합을 고려