본문 바로가기
[C#] 연산자 재정의 class OPClass{ public int a = 0; public static bool operator ==(OPClass c1, OPClass c2) { return c1.a == c2.a; }}연산자 오버로딩의 조건1. public2. static반환 타입은 자유 2024. 9. 28.
[C#] Thread(3) 스레드 동기화 멀티 스레드의 문제스레드의 수가 많아질수록 관리가 어렵고 더 많은 문제가 발생하게 된다.여러 개의 스레드가 하나의 자원을 공유하기 때문이다. 스레드가 자신의 내부에서만 자원을 사용한다면 문제가 되지 않는다. 하지만 여러 개의 스레드가 동시에 하나의 자원을 사용하려 한다면 병목현상이 나타난다. 또한 하나의 스레드가 자원을 독점하고 있다면 나머지 스레드는 무한히 대기해야 하는 데드락 현상이 발생할 수 있다. 동기화동기화란 여러 곳에서 자원을 요청했을 때 순차적으로 사용한다는 개념이다.1개의 데이터를 여러 스레드가 공유할 때 특정스레드가 어떤 자원을 사용하게 되면 나머지 스레드가 접근할 수 없도록 lock을 걸고 사용이 끝나면 lock을 해제하여 다른 스레드가 접근할 수 있도록 한다. 동기화를 하는 대표적인 .. 2024. 9. 28.
[C#] Thread(2) 스레드의 상태 스레드의 상태스레드는 크게 생성직후(Unstarted), 실행가능(Runnable), 대기(Suspended), 종료(Stopped) 4가지 상태로 나눌 수 있다. 1.생성직후(Unstarted) 상태스레드가 막 생성된 상태로 이상태에서 스레드의 Start() 메소드가 호출되면 실행가능 상태가 되고, 해당 스레드의 메소드가 종료되면 바로 종료상태가 된다. 2. 실행가능(Runnable) 상태실행가능 상태의 스레드들은 큐에 저장한 후 CLR(공용 언어 런타임)에서 관리한다. CPU는 한번에 하나의 스레드만을 실행 할 수 있기 때문에 하나의 스레드만 실행되고, 나머지 스레드 들은 대기하고 있다. 이 2가지 경우의 스레드를 모두를 실행가능 상태라고 말한다. 3. 대기(Suspended) 상태실행중인 스레드를 .. 2024. 9. 28.
[C#] Thread(1) 스레드의 개념 스레드는 프로세스 내에서 실행되는 여러 흐름의 단위로 하나의 프로세스는 여러 개의 스레드가 독립적으로 실행될 수 있다.도로가 프로세스라면 스레드는 차선 System.Threading namespace주요 기능내용Interlocked멀티스레드 기반에서 스레드 간에 공윧되는 객체를 동기화한다.Monitorlocks, wait, signals를 통해서 스레드 객체를 동기화 한다.Mutex2개 이상의 스레드가 공유자원에 동시에 접근할 때 동기화한다.Thread스레드를 생성, 제어하는 기능을 제공한다.ThreadPool해당 프로세스내의 스레드를 관리하는 기능을 제공한다.Timer설정한 시간 간격으로 메소드를 실행하도록 기능을 제공한다.ThreadStart스레드에서 실행되는 메소드를 등록하는 델리게이트이다.Wait.. 2024. 9. 28.
[C#] event event는 class내에 특정한 이벤트가 일어났음을 외부의 이벤트 가입자들에게 알려주는 기능을 한다. 이벤트 선언 형식접근 지정자 event 델리게이트 이름; event는 delegate와는 달리 할당연산자( = )를 사용할 수 없으며, 오직 이벤트 핸들러 추가 ( += ) 혹은 기존 이벤트 핸들러 삭제( -= )만을 할 수 있다. 또한 delegate와 달리 해당 클래스 외부에서는 직접 이벤트를 호출할 수 없다. EventHandler 델리게이트를 사용한 이벤트 처리c#에서는 이벤트를 처리하기 위한 권장 이벤트 처리기(EventHandler 델리게이트)가 제공이 된다.내부 라이브러리에 선언되어 있는 EventHandler는 다음과 같다.public delegate void EventHandler(ob.. 2024. 9. 28.
[C#] Types Value TypeReference Types메모리를 가리키는 방식메모리를 직접 가리킴메모리를 가리키는 참조를 통해 가리킴해당하는 형식intfloatenumboolstructclassobjectarraystring복사 방식Value Type끼리 할당 할 때 값을 그대로 복사Reference Type끼리 할당할 때 참조값만을 복사메모리 생성변수 생성과 동시에 메모리 생성변수의 선언과 메모리 생성이 분리됨 2024. 9. 28.
[C#] const보다는 readonly가 좋다 -const ● 컴파일타임 상수. ● 컴파일타임에 변수가 값으로 대체된다.const int a = 100;if(100 == a)때문에 위의 코드는 아래와 정확히 동일한 IL코드로 컴파일된다.if(100 == 100) ● 내장된 숫자형, enum, 문자열, null에 대해서만 사용가능한 한계가 있다.  -readonly ● 런타임 상수. ● 컴파일타임에 값으로 대체되는 것이 아닌 상수에 대한 참조로 컴파일된다. 때문에 메서드 내에서 선언이 불가능하다. ● 생성자에서 초기화될 수 있다. ● 어떤타입과도 함께 사용될 수 있다. ● 상수의 값이 런타임에 평가되어 동일클래스의 인스턴스라 하더라도 인스턴스별로 서로 다른 값을 가질 수 있다.  readonly 대신 const를 사용하면 성능이 빠르다는 장점이 있지만.. 2024. 9. 28.
[C#] Func 대리자 (지정된 형식의 값을 반환하는 대리자) namespace: System Func delegate는 Action과 유사하다.Action은 반환형식이 없는 경우 사용하는 반면 Func는 반환값이 필요할 때 사용한다.  [Func 형식]Func 대리자의 오른쪽 끝(TResult)은 반환값의 타입이다. public delegate TResult Funcout TResult>();public delegate TResult Funcin T,out TResult>(T arg);public delegate TResult Funcin T1,in T2,out TResult>(T1 arg1, T2 arg2);                                 .                                 .                   .. 2024. 9. 28.
[C#] 확장메서드 기존 코드의 변경 없이 기능을 확장시키는 기능 정적 클래스에서만 정의가 가능하며 확장 메서드의 첫 매개변수는 확장할 타입을 지정한다.//확장 메서드는 정적클래스에서만 정의가 가능하다.public static class ListExtensionMethods{ //확장메서드의 첫 매개변수는 타입을 지정한다. public static List RemoveBack(this List _list, int _count) { if (_count 2024. 9. 28.
반응형