Server/C#

· Server/C#
좋은 서버 개발자가 무엇인가! 바로 서버가 죽지 않게 개발하는 서버 개발자이다. 그러려면 실행 에러에 대한 잡지식이 많아야 하는것같다. 컴파일 에러는 IDE 가 잡아 주니... 그래서 이제 이 페이지에 잡지식을 기록해 보려고 한다. 2024년 3월 22일 금요일 1. 제너릭를 쓸 때, 제너릭 변수 자리에 null을 넣으면 서버가 터진다 2. 클래스를 사용할 때, 널인 상태에서 맴버를 찾으려고 하면 서버가 터진다. 2024년 4월 9일 화요일 3. List.AddRange(null) 은 에러난다.
· Server/C#
lock 을 하면 비동기를 사용할 수 없다. 더보기 정확히는 위험하다. ( lock(리소스) {작업} 식으로 사용할 때에는 아예 컴파일 에러가 난다. ) lock 은 다른 스레드에서 이 리소스에 접근하지 못하게 하는 기법이기 때문이다. 비동기 호출을 하게 되면 await 를 할 때마다 실행 중이던 작업이 중지되고 대기 상태가 되었다가 스레드 풀의 스레드 중 하나에서 실행이 되는데, 이때 스레드가 원래 lock 을 했던 스레드가 아닐 가능성이 매우 높기 때문에 이 리소스에 접근하지 못하게 되는 현상이 생겨날 수 있다. 아무튼 이런 이유 때문에 비동기 함수에서 lock 을 주의해서 써야 한다. 비동기에서 lock 을 사용하려면 SemaporeSlim 을 사용하면 된다. SemaphoreSlim 은 lock ..
· Server/C#
생성자 public class Mom { public Mom() { Console.Write("mom "); } } public class Son : Mom { public Son() { Console.Write("son "); } } public static void Main() { new Son(); // mom son new Mom(); // mom } mom son mom 상속 public class Mom { public void Print() { Console.Write("mom "); } } public class Son : Mom { public void Print() { Console.Write("son "); } } public static void Main() { var son = n..
· Server/C#
해시테이블 딕셔너리 Key, Value 모두 자료형을 지정할 필요 없다. Key, Value 모두 자료형을 지정해야 한다. 박싱-언박싱 을 사용한다. 박싱-언박싱 을 사용하지 않는다. 해시 테이블의 박싱-언박싱 과정에서 데이터가 값 복사가 일어날 것이라 생각했는데, 참조가 보호된다. var list = new List(); list.Add(1); Console.WriteLine(JsonSerializer.Serialize(list)); var hashTable = new Hashtable(); hashTable.Add(1, list); var listInHash = hashTable[1]; var convertedListInHash = (List)listInHash; convertedListInHash...
· Server/C#
프로그램을 비정상 종료하면 에러가 뜰때가 많습니다. 이러한 경우의 에러를 없애는 방법 몇가지에 대해 소개드리겠습니다. 제가 발견한 방법은, 비정상 종료 시 호출되는 이벤트에 콜백 메서드를 추가하는 것이었습니다! 제가 찾은 이벤트는 두 종류입니다! Console.CancleKeyPress 사용 - Stop 버튼을 눌러 프로그램을 종료한 경우 - Ctrl + c 를 눌러 프로그램을 종료한 경우 using System.Diagnostics; using System.Runtime.CompilerServices; using TCPClient; class Program { private static List clients = new List(); public static void Main(string[] args)..
· Server/C#
C#은 포인터를 지원하지 않아서 메모리 세이프를 할 수 있다는것이다. 그런데 포인터를 쓸 수는 있기는하다. IntPtr, unsafe 를 쓰면 된다. (얼마나 메모리 세이프를 하고싶었으면 포인터 이름도 unsafe) 언어적 성격이 보여서 신기하다. C#이 고집하는 장점을 가져가면 좋겠지만, 언젠가 꼭 써야 하는 경우에 기술자로써 어버버 하고 싶지는 않으니 사용법을 곰부해 두고는 싶다. 기술면접때마다 "사용하신 언어의 특징은 뭔가요?" 하는 질문을 자주 받았는데, 생각보다 대답하기 어려웠다. 나는 바텀업으로 학습한 언어가 C밖에 없어서 더 대답하기 난처했던 것 같다. 모쪼록 지금은 대답할 수 있게는 되었지만 더 공부가 필요하다. C#의 장점 1. 가비지 컬렉터가 동작한다. 2. 포인터를 지양하여 메모리 세..
개발자 재은
'Server/C#' 카테고리의 글 목록