호우동의 개발일지

Today :

article thumbnail
[C#] 소켓(Socket) 서버(Server) & 클라이언트(Client) 통신 간단한 구현
C#/Game Server 2023. 5. 20. 22:43

서버 DNS 및 Socket 연결 string host = Dns.GetHostName(); IPHostEntry ipHost = Dns.GetHostEntry(host); IPAddress address = ipHost.AddressList[0]; IPEndPoint ipEndPoint = new IPEndPoint(address, 7777); // 최종주소 Socket socket = new Socket(ipEndPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp); socket.Connect(ipEndPoint); // 해당 ip주소로 연결 요청 Console.WriteLine($"Connect To {socket.RemoteEndPoint.ToSt..

article thumbnail
[C#] 하드웨어 최적화 - 메모리 베리어(Memory Barrier)
C#/Concept 2023. 5. 2. 22:26

사용하는 이유 CPU가 코드 재배치 public class Program { static int x = 0; static int y = 0; static int r1 = 0; static int r2 = 0; static void Thread1() { y = 1; r1 = x; } static void Thread2() { x = 1; r2 = y; } static void Main(string[] args) { while (true) { x = y = r1 =r2 = 0; Task task1 = new Task(Thread1); Task task2 = new Task(Thread2); task1.Start(); task2.Start(); Task.WaitAll(task1, task2); // 두 쓰레드..

article thumbnail
[C#] 쓰레드(Thread)와 쓰레드 풀(Thread Pool) 다루기( + Task)
C#/Concept 2023. 4. 26. 15:23

Thread Thread 생성 using System; using System.Threading; // 추가해줘야 사용 가능 namespace ServerCore { public class Program { // 사용할 함수(쓰레드) static void MainThread() { Console.WriteLine("Create Thread"); } static void Main(string[] args) { //Thread 이름 = new Thread(함수 이름); Thread thread = new Thread(MainThread); thread.Start(); } } } using System.Threading을 추가해 줘야 사용이 가능하다. thread.Start()를 해야 만들어둔 thread가 ..

article thumbnail
[C#] Nullable(널러블)이란? + 사용법
C#/Concept 2023. 4. 19. 21:03

Nullable이란? Nullable은 Null + able의 합성어로 C#에서 제공하는 새로운 문법이다. Nullable은 변수형 타입을 의미하는데, 변수형을 Nullable로 만들면 값으로 Null을 가지지 못하는 변수형도 Null 값을 가질 수 있다. 사용 방법 ? 키워드 사용 방법은 간단하다. public static void Main(string[] args) { //선언하는 방법 int? ex1 = null; bool? ex2 = null; float? ex3 = 3f; // 값 수정 ex1 = 3; ex2 = true; ex3 = 4.0f; // 값 대입 int a = ex1.Value; //값 호출하는 방법 Console.WriteLine($"ex1 :{ex1.Value}"); Consol..

article thumbnail
[C#] 델리게이트(Delegate)와 이벤트(Event)의 필요성 및 사용법
C#/Concept 2023. 4. 19. 00:31

델리게이트(Delegate) - 대리자 용도 델리게이트를 사용하면 함수 자체를 인자로 넘겨준 후, 그 함수를 호출하여 사용할 수 있다. public class EmptyClass { static void Receive(/* 함수를 인자(매개변수)로 넘겨받음*/) { // 인자로 넘겨받은 함수 실행 } public static void Main(string[] args) { Receive(/* 매개변수로 넘기길 원하는 함수 */); } } Receive 함수의 매개변수로 특정 함수가 들어간 뒤, 이를 Receive 함수에서 호출할 수 있다는 것이다. 델리게이트 필요성 근데 이런 짓을 왜 하는 것일까? 그냥 Receive 함수 안에 실행하려는 함수를 넣거나, 코드를 넣으면 안 되나?? 유니티 개발 환경에서 ..

article thumbnail
[C#] 얕은(Shallow) 복사와 깊은(Deep) 복사 이해하기
C#/Concept 2023. 4. 18. 19:28

지난 포스팅에서 이어서 설명한다고 했던 깊은 복사에 대해 다루려고 한다. 깊은 복사에 대해 이야기하면 필연적으로 얕은 복사와 함께 이야기하는데, 얕은 복사와 깊은 복사를 비교해 보며 알아보자. 정의 정의적인 부분부터 살펴보자. 얕은 복사 복사하려는 원본에 대한 새로운 객체(복사본)를 생성하는데, 이 객체는 원본 객체를 참조한다. 즉, 생성된 복사본은 원본 객체가 가리키는 주소와 같은 곳을 가리키게 된다. 그렇기 때문에 복사본은 원본 객체에 종속적이다. 이는 주소에 의한 참조랑 비슷한 의미로 생각해도 된다. 깊은 복사 얕은 복사와 같이 원본에 대한 복사본을 생성하는데, 인스턴스화할 수 있는 모든 요소 (내부의 클래스 변수, 메서드, 인스턴스 값 등)를 모조리 복사한다. 그렇게 하여 원본 객체로부터 완전히 ..

article thumbnail
[C#] 매개변수로써의 구조체와 클래스의 차이
C#/Concept 2023. 4. 18. 12:03

매개변수로의 구조체와 클래스 사용 얕은 복사와 깊은 복사에 대해 알기 전에 구조체와 클래스에 대해 이야기해보려고 한다. // 클래스 Test_c class Test_c { public int a; public int b; } // 구조체 Test_s struct Test_s { public int a; public int b; }; 둘 다 int형 변수 a, b를 담고 있는 변수형이다. 기능으로는 큰 차이가 없어 보인다. 그럼 이렇게 변수를 한 곳에 모아두는 것으로만 사용할 때는 사실 큰 차이가 없는 것일까? 다른 계산 결과가 나오는 예시 코드 그렇지 않다. 아래의 예시를 보자. using System; namespace CSharp_Test { class Test_c { public int a; } s..