목록IT Study (23)
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 들이 있다. 참조 타입은 힙에 저장되며,..
- Trouble Case -> 담당하고 있는 채팅 UI 에서 문제가 발생했다. -> 메모리 이득 때문에 SuperScroll 을 사용하고 있는데, Slot의 크기에 따른 정렬이 원활히 되지 않는다는 점이다. 말풍선 제작에 참고한 블로그 https://euliciel.tistory.com/3 [Unity] UGUI로 말풍선 만들기 1. 말풍선 이미지 준비 말풍선을 만들기 위해 준비한 이미지를 Sprite Editor로 수정해 주어야 한다. 초록 라인으로 말풍선이 커졌을 때 늘어날 부분을 잡아준다. 안드로이드의 나인패치와 같은 원 euliciel.tistory.com 많은 사람들이 말풍선 제작할 때, 참고하는 블로그다. 좋은 자료이긴하지만, Superscroll 을 쓸때, 여러가지 제한점이 존재하는것 같다..
... 썼던거 날려먹었다.. 짧게 다시 써야지.. [ 찾아본 이유? ] - 프로젝트 진행중에 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..
스마트 포인터(Smart Pointer)란? - 대표적인 Unmanaged 언어인 C++은 메모리에 대해 직접 관리해 할당에 대한 누수를 처리해주어야 한다. 할당한 메모리를 Release 시켜주지 않을 경우, Memory Leak 이 쌓이게 되며 램에 한공간에 축적되어 시스템 저하를 발생시킨다. 쉽게말해, 프로그램의 안전성을 보장하기 위해 스마트 포인터를 사용하며, 포인터 처럼 동작하는 클래스 템플릿으로, 사용이 끝난 메모리를 자동으로 해제해준다. 동작 원리 - 기본 포인터가 실제 메모리를 가리키도록 초기화, 이후 스마트포인터에 대입하여 사용. 충분한 사용 후 소멸시 delete 키워드를 사용해 메모리 해제, new 키워드가 반환하는 주소를 스마트 포인터에 대입 시 메모리를 해제할 필요가 없어진다. 사용..
이 두 데이터의 형식은 아래의 참고문헌들을 참고하여, 작성한다. 다만, 내가 가진 CS 지식의 깊이로 인해 잘못된 해석이 있을 수 있다. * 일단 왜 찾아보았는가? - 현재 진행하고 있는 프로젝트에서 Data Parsing을 xml 파일로 하고 있고, 파싱을 기준으로 보면 JSON 이나 Binary 로 관리되는 BSON 이 강력하다는 이야기를 들은 기억이있어, ToyProject 의 Data Loading Time을 줄일 수 있는가에 대한 의문이 들어 찾아보게 되었다. [ 총평 ] - 참고문헌을 보고 총평을 먼저 제시하자면, 일단 둘은 크게 비슷한 영역이 있겠지만 완전히 동등한 입장은 아닌것 같다. 자료를 보면 많은 개발자가 XML 이 JSON을 대체했어! JSON은 뛰어나! 라고 이야기하나보다. (번역..