본문 바로가기

c#11

c++, c# 의 소켓통신에 관하여, 문자열, 파일, 구조체 전송에 대하여 c++, c#의 소켓통신에 관하여, 문자열, 파일, 구조체 전송에 대하여 과거에는 프로젝트를 진행하면 서버, 클라간의 언어를 맞추는 경우가 많았습니다. 제가 게임 쪽에서 좀 일해서 cpp 서버에 cpp 클라 같은 경우는 많이 존재했죠. 하지만 클라, 서버의 다양성이 늘어남에 따라, 클라의 경우는 지원하는 엔진이 사용하는 언어, 서버의 경우는 웹서버, 소켓 서버, 작업자의 능숙도 등이 고려되어 서로 다른 언어로 작업된 작업물들이 통신을 해야 되는 경우가 많이 생기고 있습니다. 그중 c++, c#이 서로 통신을 하는 경우에 대해 좀 보려합니다. 코드 관련 이야기는 거의 안쓸 계획입니다. 예제 코드 관련해서는 링크해서 남겨두도록 하겠습니다. 크게는 닷넷 환경에 대한 이야기가 될 수도 있겠습니다. 문자열의 경우.. 2021. 7. 15.
CS 기초강좌 10. 캐스팅(casting), is, as, 변환 연산자 CS 기초강좌 10. 캐스팅(casting), is, as, 변환 연산자 c# 캐스팅 규칙 int n = 10; float f = 5.5f; f = n; //가능 n = f; //불가, 데이터 손실이 일어나는 경우 불가 데이터의 손실이 날 수 있는 경우, 캐스팅(암시적 형 변환)이 되지 않는다. int n = 10; float f = 5.5f; f = n; //가능 n = (int)f; //가능 명시적 형 변환을 가능 명시적으로 (int) 를 표기시켜 형 변환하는 것은 가능하다.(데이터 손실은 당연히 발생함 is, as 다음 코드를 보자. using System; class Car { } class Tank : Car { public void Fire() { Console.WriteLine("Fire!!.. 2020. 11. 16.
CS 기초강좌 9. 널 조건부 연산자, 널 접합 연산자 Elvis operator "?" "?[" "??" CS 기초강좌 9. 널 조건부 연산자, 널 접합 연산자 Elvis operator "?" "?[" "??" 다음 코드를 봅시다. using System; class Point { public int x = 0; public int y = 0; public override string ToString() { return string.Format($"{base.ToString()} x:{x} y:{y}"); } public void PrintToString() { Console.WriteLine(ToString()); } } class Program { public static Point CreatePoint(int x, int y) { if (x < 0 || y < 0) return null; Point .. 2020. 11. 15.
CS 기초강좌 8. Nullable ?표현 CS 기초강좌 8. Nullable ?표현 아래 코드를 봅시다. using System; class classPoint { public int x = 0; public int y = 0; } public struct structPoint { public int x; public int y; } class Program { static void Main(string[] args) { classPoint cp1 = new classPoint(); classPoint cp2 = null; //a structPoint sp1 = new structPoint(); structPoint sp2 = null; //b } } class와 struct를 하나씩 정의하고 아래에서 각기 생성 시켜 봅니다. 이전에 'CS 기.. 2020. 11. 14.
CS 기초강좌 7. 값 타입과 참조 타입의 비교 연산자 == or Equality CS 기초강좌 7. 값 타입과 참조 타입의 비교 연산자 == or Equality 먼저 참조타입의 비교에 대해서 보자. 먼저 객체를 비교 하는 방법에는 2가지가 있습니다. 연산자 ==, 그리고 System.Object가 제공하는 Equality 메소드입니다. 다음 코드를 보아요. class classPoint { public int x = 0; public int y = 0; } class Program { static void Main(string[] args) { classPoint cp1 = new classPoint(); classPoint cp2 = cp1; classPoint cp3 = new classPoint(); } } cp1, cp2, cp3 세 가지의 변수가 있습니다. cp1, cp3.. 2020. 11. 13.
CS 기초강좌 6. 값 타입과 참조 타입, 스택과 힙, struct와 class CS 기초강좌 6. 값 타입과 참조 타입, 스택과 힙, struct와 class 사용자가 코드를 통하여 객체를 생성할 때, 크게 두 가지 메모리 영역에 생성시킬 수 있다. stack과 heap 영역이다. 관련 설명을 간단히 가져오면 오래와 같다. 스택 매우 빠른 액세스 변수를 명시 적으로 할당 해제 할 필요가 없습니다. 공간은 CPU에 의해 효율적으로 관리되고 메모리는 단편화되지 않습니다. 지역 변수 만 스택 크기 제한 (OS에 따라 다름) 변수의 크기를 조정할 수 없습니다. 힙 변수는 전역 적으로 액세스 할 수 있습니다. 메모리 크기 제한 없음 (상대적으로) 느린 액세스 효율적인 공간 사용을 보장하지 못하면 메모리 블록이 할당된 후 시간이 지남에 따라 메모리가 조각화되어 해제될 수 있습니다. 메모리를 .. 2020. 11. 11.
CS 기초강좌 5. C# System.Object에 대하여 CS 기초강좌 5. C# System.Object에 대하여 아래 코드부터 볼까요? class Point { public int x = 0; public int y = 0; } class Program { static void Main(string[] args) { Point p = new Point(); } } 간단하게 Point 라는 x,y 정보를 가지는 클래스를 만들어 보았습니다. 이 클래스를 생성시키고 x, y에 접근하려 했을 때, 아래와 같이 표시되는데요. Point p = new Point(); p.ToString(); //?? 분명히 새로 만든 클래스인데 내가 생성한 적 없는 메서드가 보입니다. 사용 또 한 되고요. system.Object 이전 5강에서 c#은 모두 객체이라고 말한 적이 있습.. 2020. 10. 19.
CS 기초강좌 4. C# 타입, 변수의 특징 CS 기초강좌 4. C# 타입, 변수의 특징 c#에서 타입과 변수의 특징을 알아보자. 다음 코드를 보자. int n = 0; Console.Write(n); 정상 독작을 하는 코드이다. 만약 n을 초기화하지 않는다면? C++ 등 여러 언어에서 값을 초기화 하지 않을 경우 쓰레기 값, 알기 힘든 값이 표기되는 경우가 많은데, C#의 경우는 명시적으로 오류를 출력한다. var? 라인의 우변의 보고 좌변을 형식을 추론하여 사용한다. 다음 코드를 보자. int n = 0; int n1 = n; n을 float형으로 바꾼다고 가능하면, float n = 0; var n1 = n; c#은 모든 것이 객체이다. 당신이 명시적으로 선언한 값들만이 객체가 아니다. float n = 0; //변수 var n1 = n; /.. 2020. 10. 18.
CS 기초강좌 3. C# interface 인터페이스 CS 기초강좌 3. C# interface 인터페이스 c#에는 인터페이스라는 계념이 있습니다. 일관된 형태의 라이브러리를 만들려고 할 때 관계성이 있는 클래스들이 사용하는 메서드의 이름을 약속하는 문법이다. 클래스는 만드는 사람과, 사용하는 사람이 인터페이스를 알고 있으면 메소드 들의 규칙성이 있음을 미리 알 수 있다. 다음 예를 보자. 자료구조를 구현할 때 using System; class Vector { public void Clear() { } public void Add() { } public void Remove() { } } class Queue { //여기에도? } class Program { static void Main(string[] args) { } } 위와 같이, 자료구조 클래스를.. 2020. 10. 17.
CS 기초강좌 2. C# 클래스 기초 CS 기초강좌 2. C# 클래스 기초 간단한게 상속 구조의 클래스를 만들어 보았습니다. 아래 코드 using System; class Parent { public int data = 0; } class Child : Parent { } class Program { static void Main(string[] args) { Child c = new Child(); } } class Parent는 부모 클래스이고 class Child : Parent 에 부모를 상속시킨 구조입니다. 그리고 Child c = new Child(); 코드로 자식을 생성시켜보았습니다. 필드의 재정의 using System; class Parent { public int data = 0; } class Child : Parent .. 2020. 10. 16.
CS 기초강좌 1. C# 콘솔 프로젝트 세팅, 표준 입출력 CS 기초강좌 C#. 콘솔 프로젝트 세팅, 표준 입출력 콘솔 프로젝트 세팅 visual stdio를 기준으로 설명한다. .NET 데스크톱 개발 이 설치되어 있어야 한다. 새로운 프로젝트 >> Visual C# >> 콘솔 앱 앱의 이름은 본인이 원하는 데로 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApp2 { class Program { static void Main(string[] args) { Console.WriteLine("안녕하세요"); //테스트를 위해 한줄 추가 } } } 초기 코드는 이럴 것이다. .. 2020. 10. 14.