본문 바로가기

Unity UnityAction과 Reference Count 궁금점 유니티의 UnitAction객체를 사용하는데 있어서 궁금증이 생겼다. UnityAction은 우선 내부적으론 C#의 델리게이트형식으로 사용되고 있었으며 UnityAction 델리게이트에 추가한 객체가 null값을 대입해도 제대로 작동할지가 궁금하였다. null값을 넣으면 해당 객체는 GC에서 수집해가서 수집된 이후에는 UnityAction이 엉뚱한 값을 가지고 있을거라 생각했었다. TestT testclass; UnityAction uAction; void Start () { testclass = new TestT(); uAction += testclass.PrintA; // testclass 멤버변수 a값을 출력하는 함수 uAction.Invoke(); testclass = null; //여기서 GC가..
ref, out, Tryparse Keyword ref Call by reference 효과를 주게됨 (대신 반드시 값이 할당되어 있어야 한다.) static void Main(string[] args) { Vector v1; v1.X = 5; v1.Y = 10; Change(ref v1); Console.WriteLine(v1); } static void Change(ref Vector vt) { vt.X = 7; vt.Y = 11; } //결과 : x : 7 y : 11 //ref키워드를 사용안한 결과 : x : 5 y : 10 out ref키워드와 동일하게 Call by reference효과를 주며 반드시 값을 할당해야하는 강제성을 주게 된다. (보통 해당 function의 결과값을 인자로 넣고 받고 싶을때, 결과값을 강제하고 싶을때 사용, re..
Get방식과 Post방식 Get방식 클라이언트에서 서버로 데이터를 전송할 때, 주소 뒤에 '이름', '값' 이 결합된 스트링 형태로 전달한다.주소창에 쿼리스트링이 그대로보여져 보안성이 낮다.길이에 제한이 있다.(전송 데이터의 한계가 있다.)psot방식보다 상대적으로 전송속도가 빠르다. ex) 네이버에 돼지를 검색하면 나오는 http 주소https://search.naver.com/search.naver?sm=top_hty&fbm=0&ie=utf8&query=돼지 Post방식 일정 크기 이상의 데이터를 보내야 할 때 사용한다.서버로 보내기 전에 인코딩하고, 전송 후 서버에서는 다시 디코딩작업을 한다.주소창에 전송하는 데이터의 정보가 노출되지않아 Get방식에 비해 보안성이 높다.속도가 Get보다 느리다.쿼리스트링(문자열)데이터 뿐만..
is, as Keyworkd is 형변환이 가능한지(서로의 타입이 호환 가능한지)를 확인해준다. as Reference type 형변환을 할때 사용한다. Cast보다 is, as 형변환을 사용하자 형변환을 할때마다 as연산자를 사용하는것이 좋은 선택이다. as연산자가 cast연산자를 사용하는 것 보다 더 안정적이고 런타임에 더 효율적이다. as연산자를 사용하면 try/catch구문이 필요가 없으므로 코드가 간결하고 부하가 줄어든다. as연산자는 valu type의 변환은 불가능하다. 변환에 실패하면 null값을 반환하는데 value type에는 null값을 넣을 수 없기 떄문이다. is / as 장점 as와 cast의 가장 큰 차이점은 사용자 정의 변환의 처리이다. as는 사용자가 정의한 연산을 허용하지 않는다. as나 is는 변환..
C#에서의 Get / Set C++에서는 멤버변수들을 priavte으로 두고 사용을 하고싶으면 Get / Set 함수를 직접 구현해야한다. C#에서는 Get / Set을 자동으로 구현해주는데 public bool Level1 { get; set; } 이런식으로 하면 자동으로 get, set을 구현해준다. public bool Level1 { get; } 이렇게하면 쉽게 Read Only Data로 선언할 수 있다. public bool Level1 { set; } 이렇게하면 쉽게 Write Only Data로 선언할 수 있다. (get이나 set 하나만 구현하는 기능은 C# 6버전 이상부터 가능하다.즉 오래된 unity의 경우 사용이 불가능한 문법이다.) 근데 public인데 get set이 의미가 있나 싶기도하고그렇다고 priva..
GC / SGen -Garbage Collector Garbage Collection을 수행하는것 -Garbage Collection 메모리 기법중의 하나로 프로그램이 동적으로 할당했던 메모리 영역중에서 필요없게 된 영역을 해제하는 기능존 매카시가 개발했다.('Mark&Compact Algorithm'을 사용하여 더이상 참조하지 않는 객체를 분별한다.) GC 수집조건은 system의 실제 memory가 부족하거나, Managed heap의 할당된 object에 사용되는 memory가 허용되는 임계값을 초과할때, GC.Collect method를 호출할 떄 작동한다. -장점 유효하지 않은 포인터 접근을 방지해준다.이중해제를 방지해준다.메모리누수를 바지해준다. -단점 어떤 메모리를 해제할지 결정하는데 비용이 많이든다.쓰레기 ..
CLR / CLI / JIT / AOT JIT(Just In Time)컴파일, Dynamic translation(동적번역), 달빅에서 사용하는 방식 프로그램을 실제 실행하는 시점에 기계어로 번역하는 컴파일기법프로그램의 실행 속도를 빠르게 하기위해 사용하며 실행시점에서 interpreter 방식으로 기계어 코드를 생성하면서 그 코드를 Caching하여같은함수가 여러번 호출될때 매번 기계어 코드를 생성하는것을 방지해 준다. JIT 단점 초기 구동시에는 Source code를 runtime에서 Compile하는데 시간과 Memory를 소모하기떄문에 정적 컴파일된 프로그램에 비해 실행속도면에서 손해를 본다.특히 실행시간이 매우 짧은 경우에는 컴파일된 코드를 제대로 사용하기도 전에 프로그램이 끝나는 상황이 벌어지기도 한다. AOT(Ahead Of T..