C#

[C#] Garbage Collector

July 10 2022

GC 기본사항 CLR에서 자동 메모리 관리 역할을 하기 위해 GC를 둔다 사용자는 메모리 해제 등 관리 작업을 위한 코드를 작성하지 않아도 된다 메모리 누수 및 메모리 반환, 해제된 메모리에 접근 등 문제를 해결 GC에 의해 효율적으로 메모리를 할당

[C#] Type

July 03 2022

Value Type 값이 바로 할당되는 타입 직접 값을 가지고 있다 int, float, char 등이 이에 해당한다 System.ValueType으로부터 상속

[C#] Method와 Virtual Table

July 02 2022

Virtual Table의 구조 C#에서 모든 클래스는 System.Object 클래스에서 상속되므로 VTable을 갖는다 기본적으로 ToString, Equals, GetHashCode, Finalize 메서드를 VTable에 갖는다 Base클래스가 가상 메서드가 없다면 이외의 메서드들은 VTable Slo...

[C#] Abstract Data Type

July 02 2022

추상적 자료형 ADT 자료 자체의 형태와 연산을 수학적으로만 정의한 것

[C#] Value Type에 대해

June 22 2022

Value type이면 모두 stack에 저장된다? Value type은 stack에 저장될 수 있다 항상 stack에 저장되는 것은 아니다 프로그래머는 특정 객체에 대해 stack에 저장되는지 heap에 저장되는지를 알아야할 필요가 있었다 사용자에게 노출되지 않은 상태로 메모리를 관리하는...

[C#] Struct와 Class

June 14 2022

Struct 값 타입 allocation 및 deallocation 시 참조 타입보다 소요가 적다 stack에 저장 nested struct 구조인 경우 inline member들은 private by default

[C#] Array

May 14 2022

Difference between Array, ArrayList, List Array

[C#] dynamic

August 21 2021

동적 형식 dynamic 변수 및 해당 멤버에 대한 참조 사용에 대한 컴파일 타임 검사를 패싱 런타임에서 확인 대부분의 상황에서 object 처럼 동작 그러나 컴파일러가 형식을 검사하지 않은 상태 컴파일 타임을 거치며 object 타입으로 변환 런타임에서 dynamic...

[C#] Event Queue

August 04 2021

Event 한 object에 의해 어떤 action이 발생했음을 알리는 notification .NET에서는 observer design pattern을 사용

[C#] ContainsKey와 TryGetValue

June 30 2021

TryGetValue vs. ContainsKey? ```csharp // key가 있는지 체크 public bool ContainsKey(TKey key) { return (this.FindEntry(key) >= 0); }

[C#] default

June 14 2021

default 연산자 default 키워드는 해당 변수 타입의 기본 또는 빈 상태를 반환 참조 형식(class, delegate, …)의 default 값: null 값 형식 (struct, enum, …)의 default 값: all-zeroes value int 0, DateTime 0001-01-01 00:00:0...

[C#] Blittable과 Unblittable

June 14 2021

Managed vs. Unmanaged Code Unmanaged code란 컴퓨터 구조, 프로세서에 특화되어 그에 의존하는 코드 C#에서는 unsafe 키워드를 이용하는 코드 프로그래머에 의해 직접 관리 Managed code란 .NET 프레임워크에서 구동하는 C# 코드 자체 ...

[C#] lock

June 04 2021

lock 키워드 개체에 대한 뮤텍스를 획득하고 signal과 unlock을 실행

[C#] sealed

March 16 2021

sealed 키워드 클래스에 적용된 경우 다른 클래스가 해당 클래스에서 상속하는 것을 막음

[C#] unsafe

March 15 2021

C# 포인터 C# 대부분의 코드는 확인할 수 있는 안전한 코드 .Net 도구에서 코드가 안전한지 확인 가능 원시 메모리를 할당하지 않고, 포인터로 직접 메모리에 엑세스하지 않음 경우에 따라 앱의 성능을 향상 포인터가 필요한 네이티브 함수를 호출하는 경우 필수 보안 및 안전성 이슈 발생...

[C#] async와 await

March 12 2021

동기와 비동기 동기 어떤 operation을 실행시켰을 때 결과값이 도출될 때까지 프로그램은 멈춰서 기다려야 함 비동기 언제 값이 도출될 지 보장할 수 없고, 그 동안 프로그램은 다른 프로세스를 진행할 수 있음 async / await는 위 중 비동기 프로그래밍을 위해 사...

[C#] Extension Method

March 08 2021

확장 메서드란 기존 제공되는 클래스/구조체/인터페이스의 구현을 직접 변경하지 않고 기능을 확장해 사용 기존 데이터 타입 (int, float 등)의 class에도 적용 가능

[C#] Auto Property

February 22 2021

Property 정보은닉을 더 간결하고 간단하게 구현하도록 허용 get / set 메서드를 대신해 가독성을 보완

[C#] partial

February 19 2021

partial 키워드 C#에서는 C/C++와 달리 cs 파일 하나에 클래스 선언과 정의가 작성 클래스가 커질 경우 가독성이 떨어짐 Partial 키워드를 제공함으로써 여러 파일에 하나의 클래스를 작성하도록 허용 대리자(delegate) 또는 열거형(enum) 선언을 할 때 partial 한정자를 사용할 수 없음 ```csharp /...

[C#] byte와 char의 차이

February 19 2021

byte와 char의 사이즈 byte: 1바이트 숫자 자료형 char: 2바이트 문자 자료형 1바이트 아님! 대부분의 .Net 언어의 문자열은 유니코드 utf-16을 디폴트로 지원

[C#] parameter modifier

February 19 2021

in 키워드 in 매개변수로 전달되는 변수는 메서드로 전달되기 전 반드시 초기화 인수가 참조로 전달되지만, 수정되지 않음 오버로딩 규칙 ```csharp class InOverloads { // 오버로딩 허용 public void SampleMethod(in int i) { } public void SampleMeth...

[C#] var

February 17 2021

var 암시적 형식 컴파일러가 compile time에 자료형을 결정 제약 조건 지역 변수에만 사용 가능 변수 선언과 함께 초기화 필수 null / 익명 메서드 / 메서드 그룹으로 초기화 불가

[C#] Dictionary

February 17 2021

Dictionary의 종류 Dictionary Key와 Value의 Pair를 갖는 자료구조 Generic 해시테이블 구조를 사용

[C#] Reflection과 Attribute

February 17 2021

리플렉션의 개념 일반적으로는 클래스를 통해 객체를 생성 사용자(프로그래머)는 클래스의 필드와 메서드를 알고 있고, 사용하는 데 불편함이 없다

[C#] as와 is

February 17 2021

as와 is 형변환을 위한 예약어 개발자에 의해서 의도적으로 downcasting하도록 도와주는 연산자 downcasting 베이스 클래스가 파생 클래스로 캐스팅 되는 것 upcasting 파생 클래스가 베이스 클래스로 캐스팅 되는 것

[C#] where

February 15 2021

where 키워드 사용 예시

[C#] new

February 15 2021

메서드에 선언된 new modifier base class의 메서드를 숨김 upcasting 하여 base class의 메서드를 사용할 수 있으나 이는 의도된 디자인에 반하는 행위이므로 위험

[C#] delegate

February 15 2021

delegate(대리자) 키워드 delegate는 메서드를 다른 메서드에 인수로 전달하는 데 사용 형식이 일치하는 구조의 모든 메서드는 대리자에 할당할 수 있다 메서드는 정적/인스턴스일 수 있다. delegate 속성 함수 포인터와 유사하지만, 객체 지향적으로 인스턴스 및 메서드를 캡슐화한다. 메서드를 매개 변수로 전달할 수 ...