VisualStudio 93

[C#서버][기초] Thread & ThreadPool & Task

Thread※아래와 같은 방법으로 Thread를 직접 만들어 사용할 경우 만든 개발자가 끝까지 책임져야하는 스레드이다. (어떤 일을 할 때 마다 정직원을 고용하는 개념) 성능에 많은 부하가 갈 수 있다. IsBackground - True를 선택할 경우 메인스레드가 종료되면 함께 종료된다. (선택해줘야함)Join - 현재 새로 만든 스레드가 종료될 때까지 아래 메인스레드는 실행 할 수 없다. static void MainThread() { for (int i = 0; i ThreadPool※이미 만들어진 스레드를 잠깐 사용하는 용도로 부하가 적다.(새롭게 고용하는 직원이아닌 고용된 직원을 유동적으로 사용하는 개념, Unity의 오브젝트 풀과 같은 개념이다.)  ※스레드 ..

[C#서버][기초] Thread 테스트 방법

스레드 검색 방법 일시정지 - 스레드 창에서 스레드 선택 Thread ※아래와 같은 방법으로 Thread를 직접 만들어 사용할 경우 만든 개발자가 끝까지 책임져야하는 스레드이다. (어떤 일을 할 때 마다 정직원을 고용하는 개념) 성능에 많은 부하가 갈 수 있다. IsBackground - True를 선택할 경우 메인스레드가 종료되면 함께 종료된다. (선택해줘야함) Join - 현재 새로 만든 스레드가 종료될 때까지 아래 메인스레드는 실행 할 수 없다. ThreadPool ※이미 만들어진 스레드를 잠깐 사용하는 용도로 부하가 적다.(새롭게 고용하는 직원이아닌 고용된 직원을 유동적으로 사용하는 개념, Unity의 오브젝트 풀과 같은 개념이다.) ※스레드 풀을 사용할 때는 짧게 사용하는 곳에서 사용해야 용의하..

[C#] 제네릭 형식 제약 조건(Where)

목차 목차 제네릭 제약 조건 추가 제네릭 제약 조건 종류 new 제약 조건 notnull 제약 조건 unmanaged 제약 조건 기반 클래스 이름 제약 조건 인터페이스 이름 제약 조건 U 제약 조건 멀티 제약 조건 제네릭(Generic)은 특정 데이터 타입(Data Type)에 국한되지 않고 모든 타입을 허용하는 제네릭 메서드와 제네릭 클래스를 구현할 수 있지만, 특정 조건에만 대응되는 데이터 타입이 필요한 경우가 있습니다. 이러한 경우 where 키워드를 사용하여 제약 조건을 추가할 수 있으며, 제약 조건을 만족하지 않는 경우 컴파일 에러가 발생하도록 할 수 있습니다. 이번 포스팅에서는 제네릭 제약 조건이 무엇인지 정리하였습니다. 목차 제네릭 제약 조건 추가 제네릭 제약 조건 종류 멀티 제약 조건 제..

VisualStudio/C# 2022.10.05

[C#] C# 7.0 에서 편리해진 out 파라미터 사용방법

회사에서 평소와 같이 개발을 진행하던 중, 다음과 같은 문구를 만나게 되었습니다. 자세히 보니까, 해당 변수를 인라인으로 선언할 수 있다는 말이었습니다. 찾아보니까, C# 7.0 부터는 out 파라미터를 보다 간단하게 사용할 수 있더라고요. 그걸 의미하는 문구였습니다. 그럼 어떻게 간단하게 사용하는지 예제 코드를 통해서 보여 드리도록 하겠습니다. 예제 코드 기존에는 먼저 out 파라미터에 들어가는 변수를 먼저 1차적으로 선언해야 했습니다. 그 다음에 매개변수로 해당 변수를 넘겨서 값은 저장하는 식이었지만, C# 7.0 부터는 변수 선언을 생략하고 매개변수로 바로 전달할 수 있도록 바뀌었습니다. using System; using System.Net; using System.Net.Sockets; name..

VisualStudio/C# 2022.09.20

[C#] 리플렉션 개념 및 주의사항(Reflection)

리플렉션은 컴파일 시에 알 수 없었던 타입이나 멤버들을 찾아내고 사용할 수 있게 해주는 메커니즘이다. 그러나 다음의 주요한 단점이 존재한다. 리플렉션을 사용하면 컴파일 시에 타입 안정성을 해친다. 리플렉션은 전반적으로 느리다. 어셈블리에서 정의하는 메타데이터를 살필 때 항상 문자열 검색이 수행되어야 한다. 리플렉션을 이용하여 멤버를 호출하면 성능에 좋지 않은 영향을 미친다. 따라서 먼저 매개변수들을 배열로 포장해야 한다. 내부적으로는 이렇게 포장된 내용을 다시 꺼내어 스레드의 스택에 옮긴다. 추가적으로 CLR이 메서드 호출 전에 각각의 매개변수들이 올바른 타입을 가지고 있는지 확인하고 호출자가 호출하려는 멤버에 접근할 보한 권한이 있는지 확인해야 한다. 상기의 이유로, 타입의 필드나 메서드 혹은 속성에 ..

VisualStudio/C# 2022.09.15

[C#] 리플렉션 개념 및 사용법(Reflection)

리플렉션(Reflection)은 어떤 Type에 대한 정보를 가져오거나 접근하는 등의 작업을 런타임에 동적으로 수행할 수 있도록 해주는 기능이다. 리플렉션을 사용하면 런타임에서 메서드를 호출하거나 필드의 값을 바꾸는 등의 작업을 할 수 있다. 실제로 어셈블리는 미리 생성된 스크립트를 기준으로 생성이 되며, 어셈블리가 동작할 때 메서드가 호출되거나 필드의 값을 변경하는 행위는 모두 프로그래머가 어셈블리를 빌드하기 전에 스크립트에 정의해놓은 일련의 작업일 뿐이다. 예를 들어 클래스 A에 존재하는 a, b, c라는 세 개의 필드에 사용자로부터 값을 입력받아 지정하고자 한다면 프로그래머는 클래스 A의 구성 요소에 대해 알고 있고, 수행해야 할 동작들에 대해서도 이미 정의되어 있기 때문에 아래와 같이 코드를 작성..

VisualStudio/C# 2022.09.14