예외처리
예외
- 예외는 프로그램 실행 중에 발생하는 예기치 않은 상황을 의미한다.
- 예외는 프로그램의 정상적인 흐름을 방해하고 오류를 야기할 수 있다.
예외 처리의 필요성과 장점
- 예외 처리는 예외 상황에 대비하여 프로그램을 안정적으로 유지하는 데 도움을 준다.
- 예외 처리를 통해 오류 상황을 적절히 처리하고, 프로그램의 실행을 계속할 수 있다.
- 예외 처리는 프로그램의 안정성을 높이고 디버깅을 용이하게 한다.
try-catch
try
{
// 예외가 발생할 수 있는 코드
}
catch (Exception ex)
{
// 예외가 발생했을 때 처리할 코드
}
finally
{
// 항상 실행되어야 하는 코드
}
박싱(Boxing)과 언박싱(Unboxing)
값 형식과 참조 형식 간의 변환을 나타낸다. 값 형식은 스택에 저장되고 직접 값을 가지며, 참조 형식은 힙에 저장되고 메모리 주소를 가리키는 참조를 가진다.
박싱은 값 형식을 참조 형식으로 변환하는 과정이며, 언박싱은 참조 형식을 값 형식으로 변환하는 과정이다.
int i = 42; // 값 형식 변수 선언
object obj = i; // 박싱: 값 형식이 참조 형식인 object로 변환됨
int j = (int)obj; // 언박싱: object 형식을 int 형식으로 변환
델리게이트
델리게이트(delegate)는 C#에서 메서드를 참조하는 형식이다.
델리게이트를 사용하면 메서드를 매개변수로 전달하거나 메서드를 동적으로 할당하고 호출할 수 있다.
delegate int MyDelegate(int x, int y);
// 델리게이트를 사용하여 함수를 호출하는 예제
class Program
{
static int Add(int x, int y)
{
return x + y;
}
static void Main(string[] args)
{
MyDelegate del = new MyDelegate(Add); // 델리게이트에 함수 할당
int result = del(3, 4); // 델리게이트를 통해 함수 호출
Console.WriteLine("Result: " + result); // 출력: Result: 7
}
}
Func과 Action
Func과 Action은 둘 다 델리게이트(delegate)를 나타내는 제네릭(Generic) 타입이다.
Func: 반환 형식이 있는 메서드를 나타낸다.
예를들어 Func<int, string>은 int를 입력으로 받아들이고 string을 반환하는 메서드를 가리킬 수 있다.
Func는 마지막 제네릭 매개변수로 반환 형식을 가져야 한다. 그 전에는 입력 매개변수의 형식들이 위치한다.
최대 16개의 입력 매개변수를 가질 수 있다.
예를들어 Func<int, string, bool>은 int와 string을 입력으로 받아들이고 bool 값을 반환하는 메서드를 가리킨다.
Func<int, string> convertToString = i => i.ToString();
string result = convertToString(123); // "123"
Action: 반환 형식이 없는(void를 반환하는) 메서드를 나타낸다.
Action은 입력 매개변수의 형식들을 나열하는데, 반환 형식이 없기 때문에 제네릭 매개변수 리스트의 마지막에 반환 형식이 존재하지 않는다. 최대 16개의 입력 매개변수를 가질 수 있다.
Action<string> greet = name => Console.WriteLine($"Hello, {name}!");
greet("Alice"); // "Hello, Alice!"
람다
람다(lambda)는 익명 함수를 만들기 위한 방법 중 하나이다.
람다는 함수를 정의하고 호출하는 데 사용되며, 특히 간결한 코드를 작성할 때 유용하다.
(parameters) => expression
//두 수를 더하는 간단한 람다 함수 예제
Func<int, int, int> add = (a, b) => a + b;
int result = add(3, 5); // result는 8이 됩니다.
'내일배움캠프 > 내일배움캠프 TIL' 카테고리의 다른 글
내일배움캠프 13일차 TIL 팀프로젝트Text 게임 만들기 (2) | 2024.05.01 |
---|---|
내일배움캠프 12일차 TIL Git (0) | 2024.04.30 |
내일배움캠프 10일차 TIL C# 고급 기능(제네릭,out,ref,인터페이스,enum) (0) | 2024.04.26 |
내일배움캠프 9일차 TIL C# 객체 지향 프로그래밍(가상 메서드,추상 클래스,오버라이딩) (0) | 2024.04.25 |
내일배움캠프 8일차 TIL C# 객체 지향 프로그래밍(클래스) (0) | 2024.04.24 |