C#20 [C# 섹션 8] Nullable # Nullable 왜 필요한가?값을 찾지 못한 경우에 '값이 없다'라는 상태를 표현해야 한다참조타입인 클래스는 null을 작성하면 되고bool도 false를 작성하면 되어서 직관적이다 그러나,값 타입(ex. int)은 null을 사용할 수 없다그렇기에 억지로 '사용하지 않는 특별한 값'을임의 설정해서 사용하기에 다소 아쉬움이 존재한다int FindIndex(){ // 못 찾으면 -1 반환 return -1;} # Nullable 사용법C#에서 값 타입도 null을 가질 수 있도록 Nullable 기능을 제공한다타입 뒤에 '?'를 붙여주면, null을 넣을 수 있다int? number = null; nullable 타입은 null만 올 수 있는 것이 아니다null이 올 수도 있고, 값이 들어올.. 2025. 6. 26. [C# 섹션 8] Reflection # reflectionc#에서 만들어지는 모든 클래스는최상위 타입인 object를 암묵적으로 상속받는다그래서 GetType, GetHashCode, Equals 등의 메서드를 사용할 수 있다 특히, GetType을 통해필드 정보(멤버변수, 멤버함수)를 모두 확인 및 추출이 가능하다이처럼 클래스에 대한 모든 정보들을 런타임에 확인이 가능한 것이 reflection이다C++ 에는 이러한 기능이 없다using System;using System.Reflection;using System.Security.Cryptography;namespace CSharp{ class Monster { public int hp; protected int attack; .. 2025. 6. 26. [C# 섹션 8] Exception # Exception특정 부분에서 예외가 발생하는지 확인하고예외가 발생한 경우에 특정 기능을 실행시키기 위해서 주로 사용된다 예외가 발생하는 대표적인 경우는0으로 나누기, 잘못된 메모리 참조(null), 오버플로우 등이 있다 try문을 통해 예외 발생 여부를 확인하고catch문을 통해 예외가 발생한 경우의 조치를 구현할 수 있다namespace CSharp{ internal class Program { static void Main(string[] args) { try { int a = 8; int b = 0; int result = a / b; .. 2025. 6. 26. [C# 섹션 8] Lambda # Lambda 개념일회용 함수를 만드는 문법이다 # Lambda 왜 필요한가?- 일반적인 하드코딩 방법아래의 코드를 보면, Find 함수를 종류별로 다 만들어주며매우 비효율적이다using System;namespace CSharp{ enum ItemType { Weapon, Armor, Amulet, Ring, } enum Rarity { Normal, Uncommon, Rare, } class Item { public ItemType ItemType; public Rarity Rarity; } internal class P.. 2025. 6. 25. [C# 섹션 8] Event # delegate 문제점delegate는 치명적인 단점이 있다외부에서 언제든지 누구나 호출이 가능하다는 것이다 아래의 예시를 보면,InputManager의 delegate 객체인 InputKey를외부에서 아무나 호출이 가능하다는 것이다// InputManagernamespace CSharp{ class InputManager { public delegate void OnInputKey(); public OnInputKey InputKey; public void Update() { if (Console.KeyAvailable == false) return; ConsoleKeyIn.. 2025. 6. 25. [C# 섹션 8] Delegate # delegate의 필요성C#의 delegate는 C++의 함수포인터와 같은 개념이다아래를 통해 왜 필요한지 알아보자 예를 들어서 버튼이 눌리는 경우, 특정 작업을 구현하고 싶다고 가정하자그렇다면 ButtonPressed 같은 함수 내부에 원하는 작업을 작성하면 된다static void ButtonPressed(){ // 기존 코드 // 어쩌고 저쩌고 기능 추가} 그러나 위의 코드는 복잡성을 증가시키고또한, 사실상 게임 엔진에서는 저런 함수 자체만을 제공하는 것이고함수 내부를 수정하지는 못하도록 해두었다 그래서 아래와 같이사실상 ButtonPressed의 함수의 인자로우리가 원하는 함수자체를 인자로 넘겨주고 싶은 것이 핵심이다static void ButtonPressed(// 함수를 인자로 넘겨.. 2025. 6. 25. 이전 1 2 3 4 다음