목록IT Study/C# (9)
Game Tech Blog
리플렉션 이란? C# 에서는 어플리케이션 실행 도중에 객체의 정보를 확인하기 위한 기능이다. 객체의 정보는 주로 메서드, 프로퍼티, 생성자등 인스턴스 데이터 타입 정보를 통칭한다. 예를들어, 내가 지금 제네릭 클래스를 원소로 List 등 자료구조를 사용하고 있을때, 내가 A 클래스를 쓰고 있는지 B 클래스를 쓰고 있는지 알 수 없는데, 리플렉션에 있는 GetType() 을 사용하면 내가 현재 쓰고 있는 클래스 형태를 알 수 있다. 그렇다면, 리플렉션은 어떻게 사용되어야 효율적인가? 런타임 시점에서 테스트 및 디버깅 목적으로 객체의 동작을 분석하거나, 테스트 용도로 사용되면 가장 베스트다. 이는 리플렉션은 테스트 용도로 사용하고 실제 프로그램 개발단에서는 리플렉션을 이용한 로직은 최대한 지양해야 한다는 의..
참조로 전달이란? 함수의 인자로 넘길때는 여러가지 방법이 있다. 1) 값으로 전달 2) 참조로 전달 C++ 로가면, Call by value, Call by reference, Call by Pointer 이렇게 얘기하는 부분들이 있는데, 쉽게 이야기하면 넘기기 직전의 값을 복사해서 값만 넘길 것이냐, 주소까지 완전 복사해서 이 인자를 수정하면 넘겼던 주체까지 수정될 수 있게 하느냐 그 차이다. C# 에서 값을 참조로 변경해서 넘기기 위해서는 out, ref 키워드를 정해서 작성해야 한다. 작성 예는 아래와 같다. public void Test_Func(ref int a){ a += 10; } static void Main(){ int test_A = 10; Test_Func(ref test_A); } ..
간혹, 이런 문제가 있다. 문제는 아니지만, 한 클래스를 여러 사람이 작업할 경우 어떻게 해야할까? PlayerManager가 있다고 할때, A가 PlayerManager.cs 를 수정한다. B 도 PlayerManager.cs에 수정해야할 함수가 있다. 서로서로 커밋커밋하면 손쉽게 깃에서 머지되겠지만, 음.. 뭔가 매력적이지 못하다. C 도 D 도 PlayerManager.cs 에 관심이있다면! 이제 치열하게 박터지게 싸울일만 남았다~ C#은 잘 나눠쓰라고 Partial Class 라는 것을 지원한다. Partial Class C# 2.0에 도입된 기능. 클래스의 내용을 다른 파일로 분할하나, 응용 프로그램이 컴파일될 때 합쳐져서 논리적으로는 하나다. 그래서 이 키워드가 붙은건 나눠서 파일로 관리할 수..
[ Boxing ] - Boxing 은 값 -> Object 로 값을 변경하는 것을 의미한다. 쉽게말해 값이라는 데이터를 오브젝트라는 상자에 넣는 것으로 비유될 수 있다. - Boxing은 기본적으로 암시적 캐스팅을 지원한다. (명시적 캐스팅도 지원한다.) [ Unboxing ] - Unboxing 은 Object -> 값으로 변경하는 작업을 의미한다. 이것또한, 상자라는 주소성 데이터 안에 있는 값을 꺼내는 것으로 비유될 수 있다. 먼저, 이들을 이해하기 위해서는 Data Type 저장 방식을 알아야하는데, 값 타입과 참조 타입이 있다. 값 타입은 스택에 저장되며, 종류는 정수, 실수, 문자열, 구조체 등 정해진 크기를 가진 내장형 변수들과 열거형, Object 들이 있다. 참조 타입은 힙에 저장되며,..
... 썼던거 날려먹었다.. 짧게 다시 써야지.. [ 찾아본 이유? ] - 프로젝트 진행중에 Enum 에 대한 타입비교가 필요했는데, 주어진 데이터가 String , Enum 데이터 하나씩이어서 비교할 수 있는 방법을 찾아보다가 알게됌.. [ 결론 ] 선언한 열거자에 .ToString() 함수가 있으니 그것을 쓰시라 [ 사용 방법 ] 사용 방법은 간단하다. public Enum EnumTest { None, TypeA, TypeB, TypeC, End } Public bool StringMatch(EnumTest tEnum, String StrMatch) { if(tEnum == StrMatch) return true; return false; } public void Main() { String Str..
접근제어자 Public 과 ... 들 - 변수의 선언에는 외부에서 참조할 수 있는 Public, Protected, Private 등을 같이 사용할 수 있다. 단, Public 과 같이 어디에서나 참조할 수 있도록 제어를 풀게되면, 데이터는 무분별한 곳에서 오염(변경)될 가능성이 높다. Public 대신 Get(), Set() - 내가 C++을 사용할 때는 따로 프로퍼티라는 개념이 없었고, Private 한 변수들을 선언한 후, 접근할 수 있도록 Get(),Set() 메소드 들을 따로 작성해서 세팅하고, 사용했다. ex) class TestCode { private int x, y; public int GetX() { return x; } public int GetY() { return y; } publ..
보호되어 있는 글입니다.
c++,c# 의 class와 strcut에 대한 취급차이가 조금 있는것 같다. 결론적으로 다음과 같다. [c++] 1. 디폴트 접근 지시자의 차이 (class = private, struct = public) [c#] 1. 상속 불가능 2. Data Type에 대한 차이(즉 할당 자리에 대한 차이?) [1.상속 불가능] 상속 불가에 대해서 c++에서는 아이템 구조체를 만들어서 상속받아 사용했었던 기억이 있어서 c#에서도 구조체를 상속해서 사용해보려는 중에 아래와 같은 경고가 떳다. 구글링을 해본결과, " C#의 모든 구조체는 사용자 정의 또는 .NET Framework에 정의되어 있으므로 상속할 수 없습니다. 구조체는 값 형식이고 모든 값 형식이 봉인되어 있기 때문에 봉인됩니다. 구조체는 인터페이스를 구..