예외 처리(Exception Handling) : 프로그램이 예기치 않은 상황에서 예외가 발생했을 때 해당 상황을 처리하는 기술을 의미.
C#에서 예외 처리를 구현하는 주요 방법은 try-catch 블록을 사용.
구현
class Program { static void Main(string[] args) { try { Console.Write("나눌 숫자를 입력하세요: "); int divisor = int.Parse(Console.ReadLine()); int result = 10 / divisor; // 예외 발생 가능성 있는 코드 Console.WriteLine("결과: " + result); } catch (DivideByZeroException) { Console.WriteLine("0으로 나눌 수 없습니다."); } catch (FormatException) { Console.WriteLine("잘못된 숫자 형식입니다."); } catch (Exception ex) { Console.WriteLine("예외가 발생했습니다: " + ex.Message); } finally { Console.WriteLine("예외 처리 완료"); } } }
finally 블록
finally 블록은 예외 발생 여부와 상관없이 항상 실행되는 코드 블록.
finally 블록은 예외 처리의 마지막 단계로, 예외 발생 시 정리 작업이나 리소스 해제 등의 코드를 포함할 수 있음.
finally 블록은 try-catch 블록 뒤에 작성되며, 생략할 수도 있음.
예외 처리의 필요성과 장점
프로그램 안정성 확보: 예외 처리를 사용하여 예기치 못한 상황에 대응할 수 있기 때문에 프로그램이 비정상적으로 종료되지 않고 계속 실행될 수 있음.
에러 정보 제공: 예외 처리를 통해 발생한 예외에 대한 정보를 기록하거나 출력할 수 있음. 이로써 개발자는 문제를 파악하고 디버깅하는 데 도움을 받음.
유연한 코드 제어: 예외 처리를 통해 프로그램의 흐름을 제어하여 예외가 발생하면 특정 작업을 수행하거나 대체 로직을 실행하여 예외 상황을 처리할 수 있음.
확장성 및 호환성: 예외 처리를 제대로 구현하면 새로운 예외 상황이나 변경된 환경에서도 프로그램을 유연하게 조정할 수 있으므로 시스템의 확장성과 호환성을 높일 수 있음.
사용자 정의 예외
기본적으로 제공되는 예외 클래스 외에도 사용자 정의 예외 클래스를 만들어 특정 상황에 맞는 예외를 정의하고 처리할 수 있음.
사용자 정의 예외 클래스를 만드는 방법
1.새로운 예외 클래스 정의: Exception 클래스를 상속하여 새로운 예외 클래스를 정의.
2.생성자 작성: 사용자 정의 예외 클래스의 생성자를 작성하여 해당 예외의 메시지나 추가 정보를 초기화.
3.필요한 속성 추가: 사용자 정의 예외 클래스에는 예외와 관련된 추가적인 정보를 제공하기 위한 속성을 추가.
4.예외 메시지 지정: 사용자 정의 예외 클래스의 생성자에서 예외 메시지를 초기화하거나, 기본 생성자를 사용할 때는 base() 호출을 통해 부모 클래스의 생성자에 예외 메시지를 전달.
5.예외 던지기: 적절한 시점에서 사용자 정의 예외를 throw 문을 사용하여 던짐.
값형과 참조형
값형(Value Type)
변수에 값을 직접 저장.
변수가 실제 데이터를 보유하고 있으며, 해당 변수를 다른 변수에 할당하거나 전달할 때는 값이 복사.
값형 변수의 수정은 해당 변수의 값만 변경하므로 다른 변수에 영향을 주지 않음.
int, float, double, bool 등.
참조형(Reference Type)
참조형은 변수가 데이터에 대한 참조(메모리 주소)를 저장.
변수가 실제 데이터를 가리키는 참조를 갖고 있으며, 해당 변수를 다른 변수에 할당하거나 전달할 때는 주소가 복사.
참조형 변수의 수정은 동일한 데이터를 가리키고 있는 다른 변수에 영향을 줄 수 있음.
클래스, 배열, 인터페이스 등
값형과 참조형의 차이점
박싱과 언박싱
박싱(Boxing)과 언박싱(Unboxing)은 값형과 참조형 간의 변환과 관련된 개념.
박싱(Boxing)
값형 데이터를 참조형의 객체로 감싸는 작업.
값형 데이터가 힙(heap) 메모리에 박스(객체)로 감싸져 저장.
값형 변수를 참조형 변수로 할당하거나 값형 데이터를 객체 컬렉션에 저장할 때 발생할 수 있음.
박싱을 통해 값형은 참조형의 멤버인 메소드나 속성을 사용할 수 있게 됨.
int intValue = 42; object boxedValue = intValue; // 박싱 발생
언박싱(Unboxing)
박싱된 객체에서 값형 데이터를 추출하는 작업.
힙에 저장된 객체에서 값형 데이터를 가져와서 값형 변수에 할당.
참조형 변수에서 값형 데이터를 추출하거나 객체 컬렉션에서 값을 꺼낼 때 발생할 수 있음.
언박싱을 통해 값형 데이터가 다시 원래의 값형으로 변환.
object boxedValue = 42; int intValue = (int)boxedValue; // 언박싱 발생
주의 사항
박싱과 언박싱은 메모리 오버헤드와 성능 저하를 유발할 수 있음.
박싱된 객체는 힙 메모리에 저장되므로 값형 변수의 메모리 효율성이 손상될 수 있음.
박싱된 객체를 언박싱할 때는 적절한 형변환을 사용하여 원래의 값형 데이터를 가져와야 하는데 데이터 유실이나 형식 불일치를 방지하기 위해 주의해야 함.
09:00 ~ 09:30 : 팀원 간 인사 및 하루 계획 작성
09:30 ~ 14:00 : 지급 받은 강의 복습
12시-1시: 점심식사
14:00 ~ 18:00 : 지급 받은 강의 복습
6시-7시: 저녁식사
19:00 ~ 20:00 : 지급 받은 강의 복습
20:00 ~ 20:30 : 6조 회의
20:30 ~ 21:00 : TIL,마무리 회고 진행