방명록
- C# #16 델리게이트, 람다, LINQ, 고급 자료형 및 기능2023년 08월 24일 21시 28분 54초에 업로드 된 글입니다.작성자: noun06
델리게이트(Delegate)
- 델리게이트는 메서드 참조하는 타입이다. 변수에 메서드를 할당하여 해당 메서드를 참조할 수 있다.
- 델리게이트는 여러 개의 메서드를 동시에 호출할 수도 있으며 클래스 내에서 발생하는 특정한 상황을 다루는 매커니즘인 이벤트(Event)의 처리를 위해서도 사용된다.
//기본 선언 구조 delegate 반환 형식 델리게이트명(파라미터);
// 델리게이트 선언 public delegate void EnemyAttackHandler(float damage); // 적 클래스 public class Enemy { // 공격 이벤트 public event EnemyAttackHandler OnAttack; // 적의 공격 메서드 public void Attack(float damage) { // 이벤트 호출 OnAttack?.Invoke(damage); // null 조건부 연산자 // null 참조가 아닌 경우에만 멤버에 접근하거나 메서드를 호출 } } // 플레이어 클래스 public class Player { // 플레이어가 받은 데미지 처리 메서드 public void HandleDamage(float damage) { // 플레이어의 체력 감소 등의 처리 로직 Console.WriteLine("플레이어가 {0}의 데미지를 입었습니다.", damage); } } // 게임 실행 static void Main() { // 적 객체 생성 Enemy enemy = new Enemy(); // 플레이어 객체 생성 Player player = new Player(); // 플레이어의 데미지 처리 메서드를 적의 공격 이벤트에 추가 enemy.OnAttack += player.HandleDamage; // 적의 공격 enemy.Attack(10.0f); }
람다(Lambda)
- 람다는 표현식을 사용하여 익명 메서드를 정의하는 기능이다. 주로 델리게이트와 함께 사용되며 변수에 할당하거나 메서드의 매개변수로 전달할 수 있다.
//람다식의 기본 구조 (parameters) => expression //parameters: 람다 메서드의 파라미터 목록 //expression: 람다 메서드의 본문, 파라미터를 통해 계산 수행 후 결과 반환
using System; // 델리게이트 선언 delegate void MyDelegate(string message); class Program { static void Main() { // 델리게이트 인스턴스 생성 및 람다식 할당 MyDelegate myDelegate = (message) => { Console.WriteLine("람다식을 통해 전달된 메시지: " + message); }; // 델리게이트 호출 myDelegate("안녕하세요!"); Console.ReadKey(); } }
Func과 Action
- Func는 반환값이 있는 메서드를 나타내는 델리게이트 형식이다. 제네릭 형식으로 정의되며 반환타입과 파라미터 타입을 지정하여 사용한다. 마지막 제네릭 형식 매개변수가 반환타입을 나타낸다.
// Func를 사용하여 두 개의 정수를 더하는 메서드 int Add(int x, int y) { return x + y; } // Func를 이용한 메서드 호출 Func<int, int, int> addFunc = Add; //두개의 정수를 받아 정수를 반환 int result = addFunc(3, 5); Console.WriteLine("결과: " + result);
- Action은 반환값이 없는 메서드를 나타내는 델리게이트 형식이다. 제네릭 형식으로 정의되며 파라미터 형식을 지정하여 사용한다. 반환타입이 없기 때문에 매개변수를 받아들이지만 return문을 사용할 수 없다.
// Action을 사용하여 문자열을 출력하는 메서드 void PrintMessage(string message) { Console.WriteLine(message); } // Action을 이용한 메서드 호출 Action<string> printAction = PrintMessage; printAction("Hello, World!");
LINQ(Language Integrated Query)
- 쿼리(Query)는 데이터베이스나 다른 저장소에서 원하는 데이터를 검색하거나 조작하기 위한 요청을 의미.
- LINQ는 닷넷 프레임워크에서 제공되는 쿼리 언어 확장.
- 컬렉션, XML, 데이터베이스 등에서 데이터 소스를 쿼리하고 조작하는데 사용됨.
- 데이터베이스 쿼리와 유사한 방식으로 데이터의 필터링, 정렬, 그룹화, 조인 등 다양한 작업의 수행이 가능함.
//기본 구조 var result = from 변수 in 데이터소스 [where 조건식] [orderby 정렬식 [, 정렬식...]] [select 식]; //var 키워드는 결과값의 자료형을 자동으로 추론 //from 절에서 데이터 소스 지정 //where 절은 선택적으로 사용, 조건식을 지정하여 데이터를 필터링 //orderby 절은 선택적으로 사용, 정렬 방식을 지정 //select 절은 선택적으로 사용, 조회할 데이터를 지정
// 데이터 소스 정의 (컬렉션) List<int> numbers = new List<int> { 1, 2, 3, 4, 5 }; // 쿼리 작성 (선언적인 구문) var evenNumbers = from num in numbers where num % 2 == 0 select num; // 쿼리 실행 및 결과 처리 foreach (var num in evenNumbers) { Console.WriteLine(num); }
- 다음은 LINQ에서 사용되는 일부 주요 연산자들임.
- Where: 조건을 기반으로 데이터 필터링, 특정 조건을 만족하는 데이터만 선택하여 반환.
- Select: 데이터 소스에서 특정한 열을 선택하여 새로운 형태의 데이터 생성.
- OrderBy/OrderByDesending: 데이터를 오름차순 혹은 내림차순으로 정렬.
- GroupBy: 데이터를 그룹화하여 그룹별로 요약 정보 생성.
- Join: 두 개 이상의 데이터 소스를 조인하여 관련된 데이터 결합.
- Concat: 두 개의 시퀀스를 연결하여 새로운 시퀀스 생성.
- Skip/Take: 데이터를 건너뛰거나 일부만 선택하여 반환.
- Aggregate: 시퀀스의 모든 요소를 하나의 값으로 집계.
- Distinct: 중복된 요소를 제거한 고유한 요소만 선택.
- Any / All: 조건에 맞는 요소가 존재하는지 확인하거나 모든 요소가 조건을 만족하는지 확인.
- Count: 시퀀스의 요소 개수를 계산.
- Zip: 두 개의 시퀀스에서 각 요소를 조합하여 새로운 시퀀스 생성.
- 시퀀스는(Sequence)는 데이터의 일련의 순서 있는 요소를 의미하며 LINQ에서는 배열, 컬렉션, 데이터의 모음 등을 말함.
Nullable 형
- null은 아무것도 없음을 의미하며 참조형 변수가 어떠한 객체를 참조하지 않을 때 사용된다.
- nullable 형식은 값 형식 변수에 null 값을 할당할 수 있도록 해주는 기능이다. 주로 값형 변수가 null인지 아닌지를 확인하고 처리할 때 유용하다.
// Nullable 형식 변수 선언 int? nullableInt = null; //Nullable<int> nullableInt double? nullableDouble = 3.14; bool? nullableBool = true; // 값 할당 및 접근 nullableInt = 10; int intValue = nullableInt.Value; // null 값 검사 //HasValue를 통해 값이 있는지 여부를 확인하고 Value를 통해 해당 값을 가져올 수 있음. if (nullableDouble.HasValue) { Console.WriteLine("nullableDouble 값: " + nullableDouble.Value); } else { Console.WriteLine("nullableDouble은 null입니다."); } // null 병합 연산자 사용 // nullableInt ?? 0과 같이 사용되며, nullableInt가 null이면 0을 반환합니다. int nonNullableInt = nullableInt ?? 0; Console.WriteLine("nonNullableInt 값: " + nonNullableInt); // null 조건부 연산자 // nullableInt가 null이면 text도 null string text = nullableInt?.Tostring();
문자열 빌더(String Builder)
- 문자열을 효율적으로 생성하고 조작하기 위한 클래스로 가변성과 효율적인 메모리 관리가 가능하다는 특징을 가지고 있다.
//문자열 빌더 생성 StringBuilder sb = new StringBuilder(); // 문자열 추가 sb.Append("Hello"); sb.Append(" "); sb.Append("World"); // 문자열 삽입 sb.Insert(5, ", "); // 문자열 치환 sb.Replace("World", "C#"); // 문자열 삭제 sb.Remove(5, 2); // 완성된 문자열 출력 string result = sb.ToString(); Console.WriteLine(result);
- 다음은 문자열 빌더의 주요 메서드임.
- Append: 문자열을 빌더에 추가한다.
- Insert: 문자열을 특정 위치에 삽입한다.
- Remove: 문자열의 특정 범위를 삭제한다.
- Replace: 문자열의 일부를 다른 문자열로 대체한다.
- Clear: 문자열 빌더의 내용을 모두 지운다.
- ToString: 문자열 빌더의 내용을 문자열로 변환하여 반환한다.
- Capacity: 빌더의 내부 버퍼 크기를 설정하거나 가져온다.(큰 문자열 성능 최적화)
- Length: 빌더의 현재 문자열 길이를 가져오거나 설정한다.
'C#' 카테고리의 다른 글
C# #19 정렬 알고리즘 (0) 2023.08.26 C# #17 TextRPG - 턴제 전투 (0) 2023.08.25 C# #15 인터페이스, 열거형, 예외 처리, 값형과 참조형 (0) 2023.08.24 C# #14 블랙잭 (0) 2023.08.23 C# #13 알고리즘 기초 3 (0) 2023.08.23 다음글이 없습니다.이전글이 없습니다.댓글