본문 바로가기

C#

람다 식과 클로저 람다 식이란 C# 에서 익명 함수 (Anonymous Function)을 표현하는 하나의 방식이다.람다 식은 " => " 연산자를 활용하여 매개변수와 본문을 연결하는 식으로 만든다.(매개변수) => 본문; 람다는 식 하나를 지정하는 식 람다와, 중괄호 안에 본문을 지정해주는 문 람다로 나뉜다. 식 람다(매개변수) => 식;Action print = (string s) => Console.Write(s);위와 같은 식으로 활용한다. 델리게이트의 매개변수, 리턴 형식으로 암시적으로 하나의 매개변수의 타입을 확정지을 수 있을 때는 괄호와 타입을 명시하지 않아도 괜찮다.Func power = num => num * num; 물론 매개변수가 2개 보다 많아지면 괄호로 덮어줘야 한다.Func multiply = (.. 더보기
바인딩 바인딩이란? 이름(변수나 식별자)을 값/객체/함수 등에 연결하는 과정 바인딩 = 이름 붙이기 + 값 연결하기 예)int damage = 10;여기서 damage라는 이름이 정수 10에 "바인딩"된 것즉, damage라는 이름을 통해 10이라는 값을 사용할 수 있게 된 것이다. 패턴 매칭에서의 바인딩 if (message is TakeDamageMessage dmg){ Debug.Log(dmg.Amount);} message가 TakeDamageMessage 타입이라면,dmg라는 이름으로 message 객체에 바인딩된 것즉, dmg라는 이름을 통해 message를 TakeDamageMessage처럼 쓸 수 있게 됨 Unity에서도 바인딩을 자주 씀[SerializeField] private Gam.. 더보기
패턴 매칭 패턴 매칭이란? 객체의 타입이나 값을 검사하면서 동시에 해당 값을 변수에 바인딩할 수 있게 해주는 문법 기본 개념가장 흔한 예는 is 키워드를 활용한 패턴 매칭입니다.object obj = "Hello";if (obj is string s){ Console.WriteLine($"문자열: {s.Length}자");} obj가 string이면 s라는 새로운 지역 변수에 자동 캐스팅됨s를 통해 바로 string의 메서드나 속성 사용 가능 switch문에서 패턴 매칭IMessage message = new TakeDamageMessage(10);switch (message){ case TakeDamageMessage dmg: Console.WriteLine($"피해: {dmg.Amount.. 더보기
StringBuilder C#의 일반적인 문자열(string)은 immutable(불변)이다. 즉, string을 수정하면 새로운 문자열 객체를 계속 만들어야 한다. 예)string str = "Hello"; str += " World"; // 새로운 string 객체 생성됨 반면 StringBuilder는 내부적으로 가변 크기의 버퍼를 사용하여 문자열을 한 객체 안에서 조작한다. 문자열이 계속 바뀌어도 새로운 객체를 만들지 않기 때문에 성능상 유리!! StringBuilder sb = new StringBuilder();로 선언 시 처음에 16문자까지 저장할 수 있게 생성 StringBuilder sb = new StringBuilder("Hello"); sb.Append(" World"); // 내부 버퍼에 추가함 (새 .. 더보기
using 문법 +(UnityWebRequest) using 문이란 C# 문법에서 메모리 사용을 효율적으로 관리할 수 있게 도와주는 구문 입니다. 리소스 자동 해제 (IDisposable)using 블록을 사용하면, 객체 사용이 끝났을 때 자동으로 Dispose()가 호출되어 리소스가 해제됩니다.주로 파일, DB 연결, 스트림 등 외부 리소스를 다룰 때 사용합니다. using (var reader = new StreamReader("test.txt")) { string line = reader.ReadLine(); Console.WriteLine(line); } // 여기서 reader.Dispose()가 자동 호출됨 (파일 핸들 해제)Dispose는 리소스를 사용하였을 때 해제를 하는 함수이다. Dispose()를 해야 하는 이유는 외부.. 더보기
C# - Coroutine 코루틴의 반환값은 IEnumerator (열거자) 이다.[enumerate]는 영어로 수를 세다. 카운팅 하다!! C#의 모든 Collections 컬렉션은 IEnumerable, IEnumerator를 상속받아서 구현하고 있다. - 그래서 List, Array 같은 컬렉션 클래스 객체들을 foreach 문과 같이 객체를 순회할 수 있는 것 이다.단! 열거자를 사용하여 컬렉션의 데이터를 읽을 수는 있지만 내부 컬렉션을 수정할 수는 없다. 여기서 수정할 수 없다라는 말은 내부 요소의 수정은 가능하지만 컬렉션 구조를 변경하는 행위를 할 수 없다는 것이다.item.Name = "Changed" → 가능list.Add(...), list.Remove(...) → foreach 안에서 하면 예외(Inval.. 더보기
C# - 2 C# 에서 의외로 넘어가기 쉬운 것에 대해서 간단 정리 !! - Namespace : 성격이나 하는 일을 묶는 역할- CLR (Common Languange Runtime) : C#으로 만든 프로그램이 실행되는 환경 C++ --------C# -------- IL (중간언어) ---- OS ---> 실행Python --- 컴파일러는 다양한 언어에서 중간언어로 된 실행파일을 생성하고, CLR은 다시 OS가 읽을 수 있는 네이티브 코드로 컴파일 후 실행하는 방식으로 동작한다. - 데이터 타입 - 값 타입 - 스택 공간에 값이 저장되어 있음 - 참조 타입 - 스택 공간에 주소가 저장되어 있음, 주소는 힙 공간을 가리키며, 힙 공간에는 해당 값이 들어있음 ! 어떤 어떤 게 값타입이고 참조타입인지.. 더보기
C# - Custom Type2 상속 코드를 재사용하고, 기존 클래스를 확장하고 커스터마이징하는 장점이 있습니다. 다형성(Polymorphism) Base Type이 Derived Type의 객체를 참조할 수 있다는 뜻입니다. 참조타입 & 실타입 가상 함수 멤버 (virtual) virtual 키워드를 지정해서 선언한 메서드는 가상 함수 멤버 또는 가상 멤버라고 부릅니다. 파생 클래스는 기반 클래스의 가상 함수 멤버를 재정의(override)함으로써 좀 더 특화된 구현을 제공할 수 있습니다. virtual을 적용할 수 있는 멤버는 메서드, 속성, 인덱서, 이벤트입니다. 파생 클래스에서 가상 멤버를 재정의할 때에는 반드시 override 수정자를 지정해야 합니다. 그리고 서명뿐만 아니라 반환 형식과 접근 수준도 동일해야합니다. 파생 클래.. 더보기