Loading [MathJax]/jax/output/HTML-CSS/jax.js
[C#] 메서드 그룹과 메서드 시그니처
메서드 그룹 (Method Group)메서드 집합의 이름. 여러 개의 오버로드를 모두 포함한 것. 예를 들어 ToString 메서드는 `ToString()`, `ToString(string formant)` 등 여러 오버로드를 가지고 있는데, 여기서 ToString 그 자체를 메서드 그룹이라고 한다.  메서드 시그니처 (Method Signature)메서드의 이름과 매개변수 타입 정보를  포함 하는 것을 의미한다. void PrintMessage(string message); // 시그니처: PrintMessage(string)void PrintNumber(int number); // 시그니처: PrintNumber(int)메서드 시그니처는 오버로딩을 구분하는 기준이 된다. 이 상황에서는..
2025.03.17
no image
[C#] 공변성과 반공변성의 개념 설명과 Generic의 out과 in 키워드에 대하여
서론public interface IEnumerable : IEnumerable{ IEnumerator GetEnumerator();}IEnumerable을 살펴보다, 제너릭 타입 매개변수 선언을 ``로 한 것을 발견하여 찾아보게 되었다. 쉽게 넘어갈 줄 알았는데, 생각보다 까다로운 개념이라서 어떻게 잘 설명할지 고민을 많이하며 포스팅을 작성했다. 공변성과 반공변성 (Covariance and Contravariance)우선 `out`과 `in` 키워드를 이해하기 위해서는 공변성(Covariance) 및 반공변성(Contravariance)에 대해 이해할 필요가 있다. 또한 C#의 공변성과 가변성의 개념은 배열, 델리게이트, 제네릭에 적용될 수 있다. 공변성과 반공변성은 암시적 "참조" 변환을 가능..
2025.03.04
C#
백준 15829번 Hashing [C/C++]
풀이모듈러 연산의 분배 법칙 적용 필요. 덧셈과 곱의 분배 법칙 사용(a+b) mod c=(a mod c+b mod c) mod c(a×b) mod c=(a mod c×b mod c) mod c 식 분해$$ H = \sum\limits_{i=0}^{l-1} a_i r^i \space \mathrm{mod} \space M..
2025.02.27
no image
[C++] 부동소수점의 암시적 변환(Implicit conversions)과 Usual arithmetic conversions
부동소수점의 암시적 변환 (대입의 경우)해당 링크에서는 전반적인 Implicit conversions를 모두 다루지만, 이 포스팅에서는 부동소수점의 암시적 변환만 다룬다, 캐스팅에 대한 일부분의 내용을 다루자면 다음 내용이 존재한다:암시적 변환은 특정 유형의 T1의 표현식이 해당 유형을 허용하지 않지만, 다른 유형 T2를 허용하는 컨텍스트에서 사용될 때 수행된다.T1 → T2까지의 하나의 명확한 암시적 변환 시퀀스가 존재하는 경우에만 프로그램이 잘 컴파일 된다. 산술 표현식에서 피연산자를 이진 연산자로 변환하는 대상 유형은 별도의 규칙 집합인 일반적인 산술 변환에 의해 결정된다. Floating-point promotionfloat 타입의 prvalue는 double 타입의 prvalue로 변환할 수 있..
2025.02.24
[C++] Bitwise not 연산
Bitwise not 연산Bitwise not 연산자는 '~'를 사용한다. 이는 모든 비트를 flip 시킨다. 또한 이진 연산 중에서 가장 우선 순위가 높다. 예를 들어, int 타입의 값 20에 not 연산자를 사용하면 다음과 같다.int main(){ int num = 20; cout  왜 -21이 출력될까?int 타입의 20에 not 연산자 사용하면 MSB도 반전되어 부호가 변경되며, int 타입은 2의 보수로 값을 표현한다.00000000 00000000 00000000 00010100 : 2011111111 11111111 11111111 11101011 : -21예를 들어, 1의 보수를 따랐다면 비트 "11111111 11111111 11111111 11101011"은 -20을 의미했을 것이다..
2025.02.11
no image
[객체지향, SOLID] 단일 책임 원칙 SRP
SOLID 아래 5개의 객체 지향 프로그래밍의 원칙을 줄여 SOLID 원칙이라 부른다.Single Reponsibility PrincipleOpen Closed PrincipleLiskov Substituion PrincipleInterface Segregation PrincipleDependency Inversion Principle해당 포스트는 SOLID 중 SRP를 다룬다. SRP(Single-Responsibility Principle, 단일 책임 원칙)모든 클래스는 하나의 책임만을 가진다. SRP는 클래스가 하나의 역할만 해야 하므로 변경해야 할 이유도 하나만 있어야 한다. 좀 더 기술적으로 설명하자면, 소프트웨어 사양에서 데이터베이스 로직, 로깅 로직 등의 변경 사항만 클래스의 사양에 영향을 ..
2024.12.23
[C#] Public 필드와 프로퍼티
Public 필드와 프로퍼티 차이 Properties vs. Public VariablesI occasionally see code with properties like this: private int name; public int Name {     get { return name; }     set { name = value; } } As I see it, there are three things to consider here. 1. When is a property not a property? When it's a glorblog.codinghorror.com위 글을 번역한 내용이다. C#에서는 아래 코드처럼 프로퍼티를 흔하게 볼 수 있다.private int name;public int Name{..
2024.12.20
C#
no image
[Unity Editor Scripting] ScriptableSingleton<T>의 직렬화 유지
문제점ScriptableSingleton을 쓸 때, 자연스럽게 딕셔너리를 사용해버렸는데, 사실 ScriptableSingleton에서 유지되는 ScriptableObject 객체라도 딕셔너리는 직렬화되지 않는다. 그래서 dictTest는 에디터가 리로딩되는 과정에서 역직렬화를 수행하게 되면 null값으로 변하게 된다. 사실 ScriptableSingleton도 ScriptableObject를 상속받아 구현되는 것이기에 당연한 것인데, 생각이 짧았다.public class HCManagers : ScriptableSingleton{ private HCModel _model; public Dictionary dictTest; public static HCModel Model { ..
2024.12.18
no image
[Unity Editor Scripting] "TYPE" must be instantiated using the ScriptableObject.CreateInstance method instead of new "TYPE"
에러 메시지HexaCraft.HCModel must be instantiated using the ScriptableObject.CreateInstance method instead of new HCModel. 원인 분석`ScriptalbeSingleton` 클래스를 상속받은 클래스 내부에서 `HCModel` 클래스 생성자를 호출하였다. HCModel은 Monobehaviour나 ScriptableObject를 상속받은 클래스가 아닌 일반 순수 클래스였다. 생각해보면, 유니티 엔진은 `ScriptableObject`를 상속받은 것들은 모두 자동으로 직렬화하는데, ` ScriptalbeSingleton`도 스크립터블 오브젝트를 상속받았으므로 이를 직렬화하는 과정에서 일반 plain 클래스가 섞여 있으면 직..
2024.12.18
[C#] static 초기화 시점과 C# type Initializer
static 변수 초기화 시점`beforefieldInit` 플래그가 설정되어있는지 아닌지에 따라 초기화 시점이 달라지는데, 해당 플래그의 여부는 정적 생성자가 있는지 여부에 따라 달라진다. 정적 생성자는 타입에 접근하는 순간 호출된다. .NET4 이후로는 동작이 더 "lazy"해진 것 같다고 한다. 정적 필드는 일반적인 코드를 사용하여 액세스하는 한 사용하기 전에 초기화된다. 솔직히 정적 필드를 초기화하는 곳에서 특정 동작을 코딩하진 않을 것이다.  Static constructor (정적 생성자)정적 생성자 설명 MSDN 정적 생성자 - C#C#의 정적 생성자는 정적 데이터를 초기화하거나 한 번만 수행되는 작업을 수행하며 첫 번째 인스턴스가 만들어지거나 정적 멤버가 참조되기 전에 실행됩니다.learn..
2024.12.08
[Unity Editor Scripting] EditorStyles null Reference
EditorStyles null Reference문제점Editor를 상속받은 클래스의 OnEnable에서 GUIStyle을 사용하려면 NullReference가 발생한다. 무조건은 아니지만, 다시 리로드되는 타이밍에는 직렬화 되지 않은 데이터는 초기화되므로 무조건 다시 NullReference가 발생하는 것 같다.private void OnEnable(){ Init(); //SOManagers.instance.hexGridGenerator = new HexGridGenerator(_hCGeneration.HexPrefab);}private void Init(){ _mainHeaderStyle = new GUIStyle(EditorStyles.boldLabel) { fon..
2024.12.06
no image
[C#] Delegate, EventHandler 그리고 구조에 대한 고민
Delegate델리게이트는 특정 매개변수와 반환 타입을 가진 메서드에 대한 "참조"를 나타내는 타입이다. 델리게이트를 인스턴스화하면, 호완가능한 시그니처와 반환 타입을 가진 모든 메소드와 연결할 수 있다. 또한 델리게이트의 인스턴스를 통해 메소드를 호출할 수 있다. 개발을 할 때 "메서드 자체를 파라미터로 전달할 수 있을까?" 라는 의문을 해결하는데는 델리게이트가 적격이다. 메서드에 대한 참조를 델리게이트로 래핑한 뒤, 메서드를 다른 메서드의 파라미터로 전달하는데 사용할 수 있다.  델리게이트 타입의 선언그럼 델리게이트 타입은 어떻게 선언할 수 있을까?public delegate void CustomCallback(string s);`접근한정자` `delegate` `반환 형식` `delegate타입 이..
2024.12.06
C#