C# 40

델리게이트 (Delegate), 람다(Lambda), Func, Action

● 델리게이트 - 메서드를 참조하는 타입 (함수 포인터와 비슷한 개념, 똑같지는 않음) - 메서드를 매개변수로 전달하거나 변수에 할당할 수 있음 - 참조할 메서드의 매개변수와 동일하게 정의해야 함 - 두개 이상의 메서드를 한번에 사용 가능 delegate int Calculate(int x, int y); static int Add(int x, int y) { return x + y; } class Program { static void Main() { // 메서드 등록 Calculate calc = Add; // 델리게이트 사용 int result = calc(3, 5); Console.WriteLine("결과: " + result); } } ※ 공격 콜백 예제 // 델리게이트 선언 public del..

C# 2023.11.14

값형과 참조형 (박싱과 언박싱)

● 값형과 참조형 1. 값형 - 변수에 값을 직접 저장 - 변수가 실제 데이터를 보유 - 해당 변수를 다른 변수에 할당하거나 전달할 때는 값이 복사 - 변수의 수정은 해당 변수의 값만 변경하므로 다른 변수에 영향을 주지 않음 - stack에 할당 - ex) int, float, doulbe, bool 등의 기본 데이터 타입 struct MyStruct { public int Value; } MyStruct struct1 = new MyStruct(); struct1.Value = 10; MyStruct struct2 = struct1; // struct2는 struct1의 값 복사 struct2.Value = 20; Console.WriteLine(struct1.Value); // 출력 결과: 10 2...

C# 2023.11.13

범위 내 입력값 받기

CheckValidInput(min, max);// 함수 생성 public int CheckValidInput(int min, int max)// min ~ max 값만 입력 받음 { // 아래 두가지 상황은 입력 x // 1. 숫자가 아닌 입력을 받은 경우 // 2. 숫자가 최소값 ~ 최대값의 범위를 넘는 경우 int keyInput; bool result; do { Console.WriteLine("원하시는 행동을 입력해주세요."); // 숫자가 맞다면 가져옴, 아니면 false result = int.TryParse(Console.ReadLine(), out keyInput); } while (result == false || CheckIfValid(keyInput, min, max) == fals..

C# 2023.11.13

열거형 (Enums)

● 열거형이란? - 여러개의 상수를 하나의 컨테이너에서 관리하기 위해 사용하는 자료형 ● 열거형 특징? - 연관된 상수들을 명명해서 가독성이 좋음 - 스위치문과의 호환성이 좋음 - 열거형의 각 상수는 정수 값으로 지정 ● 예시 enum MyEnum { Value1,// 0 Value2,// 1 Value3// 2 } enum MyEnum { Value1 = 10, Value2,// 11 Value3 = 20 } // 사용 MyEnum enumValue = MyEnum.Value1; switch(enumValue) { case MyEnum.Value1: // Value1에 대한 처리 break; case MyEnum.Value2: // Value2에 대한 처리 break; case MyEnum.Value3..

C# 2023.11.10

인터페이스(Interface)

인터페이스란? - 클래스가 구현해야 하는 멤버들을 정의하는 것 인터페이스 특징? - 클래스의 일종이 아니며, 클래스에 대한 제약 조건을 명시하는 것 - 클래스가 인터페이스를 구현할 경우, 모든 인터페이스 멤버를 바로 구현해야 함 - 다중상속 지원 - 유연한 설계 가능 예시 public interface IMovable { void Move(int x, int y); // 이동 메서드 선언 } public class Player : IMovable { public void Move(int x, int y) { // 플레이어의 이동 구현 } } public class Enemy : IMovable { public void Move(int x, int y) { // 적의 이동 구현 } } // 사용 IMova..

C# 2023.11.09

out, ref 키워드

● out - 메서드에서 반환 값을 매개변수로 전달하는 경우에 사용 - 메서드에서 값을 반환하는 것이 아니라, 매개변수를 이용하여 값을 전달 // out 키워드 사용 예시 void Divide(int a, int b, out int quotient, out int remainder) { quotient = a / b; remainder = a % b; } int quotient, remainder; Divide(7, 3, out quotient, out remainder); Console.WriteLine($"{quotient}, {remainder}"); // 출력 결과: 2, 1 ● ref - 메서드에서 매개변수를 수정하여 원래 값에 영향을 주는 경우에 사용 // ref 키워드 사용 예시 void S..

C# 2023.11.08

제너릭

● 제너릭 - 클래스나 메서드를 일반화시켜 다양한 자료형에 대응할 수 있는 기능 - 코드의 재사용성을 높일 수 있음 - 형태의 키워드를 이용 ● 예시 // 제너릭 클래스 선언 예시 class Stack { private T[] elements; private int top; public Stack() { elements = new T[100]; top = 0; } public void Push(T item) { elements[top++] = item; } public T Pop() { return elements[--top]; } } // 제너릭 클래스 사용 예시 Stack intStack = new Stack(); intStack.Push(1); intStack.Push(2); intStack.Pus..

C# 2023.11.08