C# 7

CIL 의 메타데이터 파고들기

메타데이터란?컴파일시 C#의 중간언어파일 CIL은 명령어들의 중간언어만 포함된것 뿐만 아니라 메타데이터 또한 포함되어있습니다.이 테이터는 데이터에 대한 정보를 나타내는 데이터로, 빌드로 부터 얻어낸 파일에는 코드, 명령어 뿐만 아니라 이런 메타데이터까지 포함됩니다.메타데이터의 종류로는 어셈블리, 클래스 이름, 변수, 메서드, 상속구조 등을 나타냅니다.이러한 데이터를 통해 C#의 리플렉션 기능을 활용할 수 있게 됩니다. 메타데이터는 그럼 리플렉션을 활용하기 위해 만들어진건가요?메타데이터는 CLR이 프로그램을 메모리에 올릴때 상속 구조가 어떤지, 필드는 뭔지, 메서드는 어떤게 있는지 파악하기 위해 활용됩니다.즉 프로그램을 동작하는데 참조에 대한 정보를 나타내는 참조 설명서이라고 보시면 됩니다.또한 CLR이..

C# 2025.04.22

내 코드가 느린 이유 - 최적화에 대한 고찰

숙련된 게임 개발자는 타겟 플랫폼에 성능을 최적화 하는 작업이 개발 사이클 전체에 걸쳐 진행된다.고사양 PC에서는 원활할 수 있지만, 저사양 모바일 플랫폼도 타겟팅 한다면 문제가 달라질 수 있다. 풍부한 환경 디테일, 스케일, 메카닉, 동작, 물리 와같은 많은 기능을 요구하지만,그로인해 특정 구간, 프레임 중 눈에 띄는 성능 저하가 발생될 수 있다. 대부분의 프레젝트에서의 문제는 렌더링과 관련이 있다.너무 큰 텍스쳐, 복잡한 메시, 비용이 큰 쉐이더, 배칭, 컬링, LOD 를 효율적으로 활용하지 못했을 경우이며특별한 게임을 만들기 위해 작성한 C# 코드가 프레임당 CPU 시간을 지나치게 소모하고 있을 수 도 있다. 그렇다면 내 코드가 느린 이유를 따져보자  1. 가비지 컬렉션에 의해 발생되는 오버헤드와 ..

C# 2025.02.10

C#을 활용한 콘솔 환경 채팅프로그램 만들기

개발기간 24.11.08 ~ 24.11.09 참고자료https://www.csharpstudy.com/net/article/1 C# 네트워크 프로그래밍 - C# 프로그래밍 배우기 (Learn C# Programming)C# 네트워크 프로그래밍 네트워크 프로그래밍은 그 범위를 상당히 넓은데, 이 섹션에서는 .NET에 기반한 TCP/IP와 UDP 프로그래밍을 중점적으로 다룬다. 네트워크 모델 네트워크의 세부 기능들을 매www.csharpstudy.com 현재까지 개발된 기능순서1. 프로그램 동작시 클라이언트가 사용할 이름을 받는다.1-1 클라이언트 이름이 admin 이라면 서버를 개설하는 관리자로 판단1-2 admin 이 아니라면 서버에서 사용될 닉네임이 된다.2. 서버는 클라이언트들의 입장, 메세지 전달의..

C# 2024.11.09

C# - stack 주소와 heap 주소 찾기

Stack 메모리 주소 확인하는 방법string a = "안녕하세요";string b = a; a 와 b 는 스택영역에서 각자의 주소를 갖고 하나의 heap 메모리를 참조하고 있는 상황이다. &변수명 으로 조사식을 확인해보면 해당 문자열 참조변수의 크기는 8byte로 해당 주소는 스택영역의 주소임을 알 수 있다. Heap 메모리 주소 확인하는 방법 string a = "안녕하세요";string b = a;a = "안녕하세요2";string c = "안녕하세요";GCHandle handle = GCHandle.Alloc(a, GCHandleType.Pinned);GCHandle handle2 = GCHandle.Alloc(b, GCHandleType.Pinned);GCHandle handle3 = GCHa..

C# 2024.07.25

C# 가변성,공변성, 반공변성, 불공변성

공변성과 반공변성은 제네릭 타입 시스템에 타입의 상속 관계에 따라 제네릭 타입변환을 허용하는 특성을 의미한다. string[] strArr = new string[5];object[] objArr = strArr;위의 코드처럼 형변환이 가능한 성질을 의미한다. .Net 4.0이전 버전에서 IEnumerable 인터페이스 와 그 이후의 인터페이스를 살펴보자public interface IEnumerable : IEnumerable // .Net 4.0 이전public interface IEnumerable : IEnumerable // 그 이후버전  위의 코드를 보면 4.0 이후의 버전에서 갑자기 out 키워드가 추가되었다. IEnumerable Ilist = new List();IEnumerable ob..

C# 2024.07.21

C# out , ref 키워드의 차이

ref 와 out 키워드는 매개변수 작성시 사용되는 키워드로함수호출시 전달받는 매개변수의 참조값을 전달하게 된다. 두개의 키워드는 제약의 차이점이 있다. 첫번째 차이점우선 아무것도 하지않는 메서드를 작성해보자.static void MethodRef(ref int m_value){}static void MethodOut(out int m_value) // CS0177 에러{} CS 0177현재 메서드를 벗어나기 전 out 매개변수를 할당해야한다. out 키워드는 출력전용 키워드로 전달받은 매개변수의 값을 반드시 대입하여 내보내줘야한다. static void MethodOut(out int m_value){ m_value = 5;} 에러코드가 사라진다. 두번째 차이점매개변수 입력과정을 살펴보자.int ..

C# 2024.07.17

C# in 키워드

in 키워드는 여러 맥랙에 사용되며 각 맥락마다 의미가 다르다.in 키워드를 사용하는 대표적인 예 : 매개변수 , foreach 문 , 제네릭 타입 매개변수 ① 메서드의 매개변수에서 사용메서드 매개변수에서 사용되는 in 키워드는 매개변수를 읽기전용으로 전달하기 위해 사용된다.이때 전달되는 매개변수는 참조를 전달하게 된다.public class TestClass{ int _myData; public void Test(in int m_data) { _myData = m_data; // 가능 Console.WriteLine(m_data); // 가능 m_data = 3; // 불가능 , 컴파일 에러 }} 매개변수가 값형식인데 in 키워드..

C# 2024.07.14