본문 바로가기

반응형

C#

(31)
[C#] 패턴 매칭(Pattern Matching) 패턴 매칭이란? 여기서 말하는 "패턴 매칭"은 정규 표현식을 이용한 문자열 매칭이 아니다. 패턴 매칭이란 "임의의 객체가 특정 패턴(모양, 타입, 값)을 만족하는지 조사 하는 것"이다. 예를 들어 "객체 r의 타입은 Rect 타입인가? r은 정사각형인가? r의 좌표는 10인가?" 등을 조사하는 것이다. 패턴 매칭 임의의 객체가 특정 패턴(모양, 타입, 값)을 만족하는지 조사 하는 것 패턴 매칭은 아래와 같은 종류가 있다. type pattern matcing : C# 초기 부터 지원. C# 7.0에 기능 추가 var pattern matching : C# 7.0 const pattern matching : C# 7.0 switch expression : C# 8.0 Type Pattern Matching..
[C#] System.Range Range란? 일반적으로 우리는 배열 연산을 사용할 때 인덱스를 이용하여 배열의 요소 하나에만 접근 했다. 하지만 C# 8.0 부터 Range를 이용해 배열의 여러 요소에 접근 할 수 있는 방법을 제공한다. class Program { static void Main(string[] args) { string s = "ABCDEFGHIJ"; char c = s[2]; // C string s1 = s[2..7]; // CDEFG string s2 = s[2..^3]; // CDEFG Console.WriteLine($"{c}, {s1}, {s2}"); } } 8라인의 배열 접근 연산을 보면 "s[2..7]" 와 같이 낮선 문법이 보인다. 암묵적으로 Range 객체를 생성하는 문법으로써 두 개의 인덱스 사이..
[C#] System.Index 이번 포스트에서는 C# 8.0에서 추가된 인덱스(index)라는 개념에 대해 살펴 보도록 하겠다. 들어가며.. Index에 대한 설명에 앞서 아래 예제를 보자. 특히 10라인에 ^ 기호가 사용 된 부분을 주목하자. using System; class Program { static void Main(string[] args) { int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int n1 = arr[2]; int n2 = arr[^2]; // 뒤에서 부터 접근 Console.WriteLine($"{n1}, {n2}"); // 3, 9 } } 10개짜리 정수 배열을 만들고 인덱스를 이용해 접근하는 간단한 예제다. 먼저 9라인을 보면 인덱스 2의 위치에 있는 요소에 접근한다..
[C#] IL(Intermediate Language) IL(Intermediate Language) 여러분의 PC를 보면 CPU가 있을 것이고 그 위에 운영체제가 설치 되어있을 것이다. 만일 여러분이 C/C++과 같은 언어로 프로그램을 작성한 다음 컴파일 하면 실행가능한 실행 파일. 즉, CPU가 이해하는 기계어 코드로 구성된 실행 파일이 나온다. 이런 실행 파일의 특징은 특정 CPU와 OS에서만 동작하는 실행파일이다. C/C++로 작성된 프로그램의 문제점 특정 환경(예를 들어 인텔 CPU, Windows OS)에서만 동작한다. 다른 환경에서 사용하려면 다시 컴파일 하거나 소스 코드 자체를 다시 작성해야 한다. C#의 경우에는 C# 컴파일러로 컴파일하고 나면 CPU와 OS에 독립적인 기계어 코드가 생성된다. 이것을 중간언어, IL(Intermedidate ..
[C#] IL 디스어셈블러(ildasm.exe) 유틸리티 ildasm.exe란? IL 디스어셈블러(ildasm.exe)는 IL 어셈블러(ilasm.exe)의 자매도구로써 IL코드를 포함하고 있는 포터블 실행 파일(PE)을 이용해 ilasm.exe의 입력에 적합한 텍스트 파일을 생성한다. 다시 말하면, ildasm.exe는 실행 파일 내부의 .NET 기계어 코드(CIL)을 분석해서 클래스 내용을 보여 주는 유틸리티다. 설치 ildasm.exe는 C#을 개발하기 위해 비주얼 스튜디오와 함께 설치 된다. 제대로 설치 되었다면 "C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools"에서 확인 할 수 있다(비주얼 스튜디오 2019 기준, 버젼마다 경로가 약간 다를 수 있다). 실행 ildasm..
[C#] 커맨드 라인으로 C# 빌드 Visual Studio에서 C#을 빌드하게 되면 주로 IDE를 통해 빌드 하게 된다(Ctrl + F5). 하지만 젠킨스와 같은 다른 빌드 도구들을 이용하려면 커맨드라인 명령어로 빌드하는 것이 여러모로 편하다. 이번 장에서는 커맨드 라인으로 C#을 빌드하는 방법에 대해 살펴 보도록 하겠다. C# 컴파일러 - csc.exe 커맨드 라인으로 C#을 빌드하기 위해서는 csc.exe를 이용해야 한다. csc.exe는 C#을 개발하기 위해 비주얼 스튜디오를 설치하였다면 C:\Windows\Microsoft.NET\Framework64\v4.0.30319 위치에 자동으로 설치가 되어 있을 것이다. 또는 'Native Tools Command Prompt'를 실행하면 된다. 윈도우 실행창에서 'Native Tools..
[C++/C#] Reading CSV file I've been fiddling around trying to make a game myself at home these days. It was planned to manage the game's metadata (item information, monster stats, quests, etc.) in Excel and save the result as a csv file for use. But... as always, it doesn't work. 한국어 버전 보기 Summary Take the harvest and start with the summary. Most CSV file reading programming examples found on the Internet omit escaping f..
[idlc] 객체 직렬화(Object Serialize) 컴파일러 idlc란? IDLC란 인터페이스 정의 언어(Interface Definition Language) Compiler의 약자로써, 구글의 프로토콜버퍼, 플랫버퍼, 아파치의 스리프트, 넷플릭스에서 사용 되는 gRPC 처럼 IDL로 정의된 구조화된 데이터를 직렬화(serialize) 하는 코드를 다양한 프로그래밍 언어로 생성하는 컴파일러 입니다. 지원 언어 : C++ : #멀티플랫폼 지원, #std 11 버전 이상 필요, #header only 라이브러리 C# Python : Python 2.x 버전 까지 지원(3.x 이상 버전 미지원) idlc의 장점 1. 분산 컴퓨팅 환경에서 구조화된 객체를 전달하기에 좋습니다. 서버는 C++로 개발 되고, 클라이언트는 C#으로 개발 되었을 때, idlc를 사용하면 각각의..
[C++/C#] CSV 파일 읽기 요즘 집에서 혼자 게임을 만들어 보려고 이것 저것 만지작 거리는 중이다. 게임의 메타데이터(아이템 정보, 몬스터 스탯, 퀘스트 같은 것)들을 엑셀로 관리하고 결과물을 csv 파일로 저장해서 사용할 예정이었다. 하지만... 언제나 그랬듯이 잘 되지 않는다. 요약 거두 절미하고 요약 부터 간다. 인터넷에서 검색 되는 대부분의 CSV 파일 읽기 프로그래밍 예제들은 콤마 대한 이스케이프 처리를 누락하고 있어 CSV 본문에 콤마를 사용 할 수가 없거나, 사용한다면 컬럼 개수가 늘어나 버리는 오류가 있다.이번 포스트에서는 엑셀에서 작성한 UTF8 인코딩 된 csv파일을 읽는 프로그램을 만들 때 흔히 놓치기 쉬운 부분을 살펴 보도록 한다. 엑셀에서 UTF8 csv 파일을 저장하면 UTF8-BOM(파일 앞에 3바이트가..
[Unity] 콜스택 알아 오기 유니티를 사용하다 보면 디버깅을 위해 로그를 찍을때 리스트 뷰에서는 콜스택에 대한 정보를 볼수 없어 귀찮은 경우가 많다. 어셋 스토에서 판매하고 있는 'Console Pro'라는 어셋을 사용하면 편리하긴하지만.. using UnityEngine; // example : // Debug.Log(LogHeader.Function + "any log text will be here"); // result : // CallStackLogMain:func_2() (at Assets/CallStackLogMain.cs:17) // any log text will be here public static class LogHeader { public static string Path { get { #if UNITY_ED..

반응형