본문 바로가기

전체 글

(18)
C#의 readonly 키워드와 불변성에 대해 readonly vs const 처음 readonly를 접하면, 자연스럽게 const와 비교하게 된다. 언뜻 보기에는 둘다 변하지 않는 값을 선언하는 문법으로, 큰 차이를 느낄 수 없다. 다른 점을 찾아봐도 주로 const는 컴파일 시간 상수고, readonly는 런타임 상수라는 정도, 혹은 readonly는 생성자에서 값을 변경할 수 있다 라는 정도로 이해하는 경우가 대다수이다. 그러나 이는 완전한 오해이다. const와 readonly는 의미적으로나 실제로나 완전히 다르다. 근본적인 차이점은 const는 상수이고 readonly는 변수라는 것이다. const는 일종의 별명과도 같다. const int a = 1; 이라는 문장이 있을 때, 이 것은 1의 별명을 a로 하겠다는 선언이다. 이는 재정의하거나..
MonoBehaviour의 초기화는 어떻게 해야 하는가? Awake로 충분하지 않나요? MonoBehaviour의 초기화 메소드로는 유니티에서 Awake, Start 등을 지원하고 있다. 일반적으로 초기화는 Awake에서 하게 될 것이다. using UnityEngine; public class Something : MonoBehaviour { private void Awake() { Debug.Log("awake."); } } 잘 동작한다. 그런데 문서에는 강조되지 않는부분이지만, 생성 당시 GameObject가 비활성화 상태일때는 Awake가 호출되지 않는다. 나중에 활성화되는 시점에 Awake가 호출된다. using UnityEngine; public class SomethingParent : MonoBehaviour { public Something s..
유니티에서 테이블 데이터 로드하기 #4 - Source Generator C#의 Source Generator를 사용하여 직렬화/역직렬화 코드를 생성하는 방법도 있다. 이론적으로 어떤 클래스를 byte array로 변환하려면 각 멤버를 모두 개별적으로 BitConverter 등을 이용해서 순서대로 byte array에 쓰면 되는데, 모든 데이터를 표현하는 클래스에 개별적으로 직렬화하는 코드를 작성하는 방법은 현실적이지 않다. 하지만 C#에는 이럴 때 사용할 수 있는 기능이 있는데, 바로 Source Generator이다. https://learn.microsoft.com/en-us/dotnet/csharp/roslyn-sdk/source-generators-overview Source Generators Source Generators is a C# compiler featu..