목록게임/Unity, C# (15)
센로그

◆ CLR이란?개발 플랫폼과 운영체제 사이의 닷넷 런타임. (가상머신) .NET의 가상머신 (Virtual Machine)우리가 작성한 소스코드(C#, C++ 등)을 OS 위에 있는 .NET에서 동작하게 해주는 것C#의 경우, 빌드 후 IL(Intermediate Language, 중간 언어)로 변환되어 CLR에서 실행되는 구조이다. ◆ CLR의 구성 (기능)CLR은 어떤 역할을 할까?Base Class Library 지원Collections, I/O, XML, DataType definition 등Thread 지원멀티스레드의 병렬 실행을 관리하기 위한 스레드 지원Type CheckerCTS(Common Type System)와 CLS(Common Language Specification)를 사용하여 형..

◆ Task.Delay() vs Thread.Sleep() Task.Delay()는 비동기 Thread.Sleep()은 동기 그럼 Task.Delay()는 왜 쓰냐! static async Task Main(string[] args){ Task delayTask = Task.Delay(2000);//기다림 시작 /*작업 본문*/ await delayTask; } 이런 식으로 씀. 작업 본문을 최소 2초동안 하고싶을 때 쓴다는 소리 ㅇㅇ. ◆ Task.Wait() vs await Wait()은 동기 대기 (해당 함수를 호출한 스레드가 블록됨) await은 비동기 대기 친구와 함께 레스토랑에서 스프를 주문(Wait 또는 await이 들어간 함수 호출)했다고 하자. 스프가 완성되기를 기다리고(Wait 또는 a..

◆ StringBuilder변경할 수 있는 문자열 String과 StringBuilder은 둘다 문자열을 나타내지만, 내부적인 구현 방식이 다르다. 기본적으로 String은 변경할 수 없는 타입이다. 즉, String 객체를 수정하는 것처럼 보이는 작업들(+연산자 등)은 실제로 해당 객체를 수정하는 것이 아니라, 새 String 객체를 만드는 것과 같다. 빈번한 변경이 있는 문자열의 경우 이렇게 매번 새로운 메모리를 할당받는 방식은 비효율적이고, 가비지를 만들게 된다. 따라서 등장한 StringBuilder은, 처음에 문자열을 담아놓을 공간(기본 Capacity = 16)을 할당한 후, Append를 한다면 공간이 꽉찰 때까지 해당 공간 내에 추가한다. 공간이 꽉차면, 새로운 StringBuilder를 ..
◆ static Class (정적 클래스) static 클래스는 인스턴스를 만들 수 없는 클래스로, 클래스명을 통해 멤버 변수 및 메서드에 접근할 수 있는 클래스이다. 전역적으로 접근해야하는 유틸리티 클래스를 만들때 주로 사용한다. 사용법 class 키워드 앞에 static 키워드를 붙여서 static Class를 만들 수 있다. 특징 static Class는 인스턴스를 만들 수 없다. static Class의 모든 멤버(필드, 메서드, 생성자 등)는 static으로 선언되어야 한다. static Class는 어디서든 클래스 이름을 통해서 접근할 수 있다. (전역적으로 접근해야할 때 주로 사용) ◆ static Constructor (정적 생성자) 모든 클래스는 일반 생성자 외에 static 생성자를 가..

◆ Extension Method (확장 메서드)이미 존재하는 타입을 재정의하거나 상속하지 않고도 새로운 기능을 추가(확장)할 수 있도록 하는 방법.NET에서 제공하는 Extension Method(확장 메서드) 기능은 특수한 종류의 static 메서드로, 마치 다른 클래스의 메서드인 것처럼 사용할 수 있는 메서드이다. 이미 존재하는 타입을 재정의하거나 상속하지 않고도 새로운 기능을 추가할 때 사용한다.(말그대로 확장할 수 있다는 뜻임!!) ※ 기존 메서드와 같은 이름 및 파라미터의 메서드로 확장할 경우, 기존 메서드로 연결됨 ◆ Extension Method 사용법static 클래스 안에 static 메서드를 선언메서드의 첫번째 파라미터에 확장할 타입을 선언하되, this 키워드와 함께 선언 (예시: ..

◆ 실행 조건 (GameObject 및 Script활성화 여부) Awake()는 GameObject가 활성화된 경우에 실행됨. OnEnable()과 Start()는 Script도 활성화된 경우에 실행됨. 예시 1) GameObject와 Script 모두 활성화된 경우 → Awake(), OnEnable(), Start() 모두 실행 예시 2) GameObject는 활성화, Script는 비활성화된 경우 → Awake()만 실행 ※ GameObject 자체가 비활성화된 경우는 모두 실행되지 않음 ※ Awake()와 Start()는 최초 1회 실행, OnEnable()은 Game object가 활성화될 때마다 실행 ◆ 실행 순서 Awake() → OnEnable() → Start() 순서로 실행 이후에 Up..