일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- C#문법
- c#기본문법
- unity3dservival
- c# 백준
- unity게임
- c# c#프로그래머스
- 유니티서바이벌게임만들기
- c#코테
- c#기초문법
- 유니티3dui
- 티스토리챌린지
- 오블완
- 시샵문법
- 스파르타코딩클럽
- 시샵
- c#
- c#문제
- unity공부
- Unity
- unity3d게임만들기
- unity3d
- Console.WriteLine
- 유니티게임만들기
- unity게임만들기
- 유니티상호작용
- c#프로그래머스기초문법
- 유니티공부
- c#코딩기초트레이닝
- 유니티
- 스파르타
- Today
- Total
나 개발자 진짜 되냐?
[ C# 기본 문법 20 ] 예외 처리 본문
예외처리..
그렇지 사람이 융통성이 있지
예외도 있고
예외도 처리해야지
암암
바로 보자!
🌟 예외 🌟
실행 중에 발생하는 예기치 않은 상황 발생
우리도 사람인지라
코딩문제도 있을것이고
아주 완벽한 언어도 아니기에
충돌이 있을 수도 있다.
그렇기 때문에
예외처리기능으로 오류 상황을 적절하게 처리하고
프로그램 실행을 지속되게 한다.
try
{
// 예외가 발생할 수 있는 코드
}
catch (ExceptionType1 ex)
{
// ExceptionType1에 해당하는 예외 처리
}
catch (ExceptionType2 ex)
{
// ExceptionType2에 해당하는 예외 처리
}
finally
{
// 예외 발생 여부와 상관없이 항상 실행되는 코드
}
try에
예외가 발생할 수 있는 코드 작성
catch에
예외가 발생하면 예외를 처리하는 코드 작성
위에서부터 순서대로 실행되며
상속 관계에 있는 경우
상위 예외타입 catch가 먼저 실행
finally는
제일 마지막 단계로
예외 발생 여부와 상관없이 항상 실행
무조건 실행!
마지막에 예외를 풀거나
정리하거나 뭐 처리 등등
다양하게 사용된다.
이 친구는 생략이 가능하다!
////////////////////try - catch //////////////////////////
try
{
int result = 10 / 0; // ArithmeticException 발생,
무한히 빼게 된다.
Console.WriteLine("결과: " + result);
}
catch (DivideByZeroException ex)
{//try문에서 이와 같은 오류가 나면 들어오게 된다.
Console.WriteLine("0으로 나눌 수 없습니다.");
}
catch (Exception ex)
{
Console.WriteLine("예외가 발생했습니다: " + ex.Message);
}
finally
{
Console.WriteLine("finally 블록이 실행되었습니다.");
}
try - catch문도 있고
사용자 정의 예외도 있다.
필요에 따라 자신만의 예외 클래스를 작성할 수 있다.
아까와 비슷한 듯 다른 듯
Exception라는 클래스를 상속받아 작성하고
catch문을 사용해서
사용자 정의 예외 타입을 명시하여 예외를 처리하고,
예외에 대한 적절한 처리 로직을 작성할 수 있다.
위의 식과 같은 코드로,
사용자 정의 예외일 경우
public class NegativeNumberException : Exception
{
// 생성자
public NegativeNumberException(string message) : base(message)
{
}
}
try
{
int number = -10;
if (number < 0)
{ // 오류던지기 throw
throw new NegativeNumberException("음수는 처리할 수 없습니다.");
}
}
catch (NegativeNumberException ex)
{
Console.WriteLine(ex.Message);
}
catch (Exception ex)
{
Console.WriteLine("예외가 발생했습니다: " + ex.Message);
}
Exception을 상속받아서 사용하고
두 번째 줄에 있는
: base(message)
이 친구는 이니셜라이저이라고 해서
생성자가 실행되기 전에 실행될 것들을 명시해 준다.
여기서 base는 부모를 뜻하며,
여기서는 Exception
즉 Exception의 생성자에 가서
message 메시지를 먼저 주고 와라!
라는 뜻이 된다.
밑에 식들은
게임을 만들 때 자주 사용하는 예외들이다.
읽어보도록 하자!
// 플레이어 이동
try
{
// 플레이어 이동 코드
if (IsPlayerCollidingWithWall())
{
throw new CollisionException("플레이어가 벽에 충돌했습니다!");
}
}
catch (CollisionException ex)
{
// 충돌 예외 처리
Debug.Log(ex.Message);
// 예외에 대한 추가 처리
}
// 리소스 로딩
try
{
// 리소스 로딩 코드
LoadResource("image.png");
}
catch (ResourceNotFoundException ex)
{
// 리소스가 없는 경우 예외 처리
Debug.Log(ex.Message);
// 예외에 대한 추가 처리
}
catch (ResourceLoadException ex)
{
// 리소스 로딩 중 오류가 발생한 경우 예외 처리
Debug.Log(ex.Message);
// 예외에 대한 추가 처리
}
// 게임 상태 전이
try
{
// 상태 전이 코드
if (currentGameState != GameState.Playing)
{
throw new InvalidStateException("게임이 실행 중이 아닙니다!");
}
// 게임 상태 전이 실행
}
catch (InvalidStateException ex)
{
// 상태 예외 처리
Debug.Log(ex.Message);
// 예외에 대한 추가 처리
}
여기서 중요한 건!
예외처리는
우려되는 한에서만 진행하고
코드 엄청 긴 거 막 예외에 넣지 말자!
내용이 짧은거같지만..
내가 잘 활용해서 쓸 수 있을까? 가 의문이다.
'C# 을 맛보았어요! > 문법정리를 해보았어요!' 카테고리의 다른 글
[ C# 기본 문법 22 ] 델리게이트, 람다 및 LINQ (0) | 2024.09.23 |
---|---|
[ C# 기본 문법 21 ] 값형과 참조형 / 박싱과 언박싱 (0) | 2024.09.23 |
[ C# 기본 문법 19 ] 인터페이스와 열거형 (0) | 2024.09.23 |
[ C# 기본 문법 18 ] out 과 ref (1) | 2024.09.23 |
[ C# 기본 문법 17 ] 제너릭 (0) | 2024.09.23 |