12. Exception
12.1. Exception
- System.Exception
: 예외 최상위 클래스
: 모든 예외를 받아낸다
: 모든 예외를 처리함으로써, 새로운 오류 발생할 수있다
- throw
: 의도적 예외 발생
- finally
: try 블록의 예외 발생으로 catch 실행시, 자원 해제와 같은 코드를 미처 실해하지 못한 경우 사용
: catch 문 모두에 반복 작성하는 것보다 finally가 효과적
: 예외에 상관없이 반드시 finally 절의 코드를 실행
: finally 내부 try ~ catch 가능
- User Defined Exception
: Exception 클래스를 상속
12.2. Exception Filter
- catch 예외 제약 조건
: when 키워드
: if 조건 분기와 같다.
13. Delegate
- 목표
1. 대리자를 선언하고 사용하는 방법
2. 대리자를 사용하는 이유와 상황
3. Generic 대리자를 사용하는 방법
4. 익명 메소드를 사용하는 방법
5. 이벤트를 선언하고 사용하는 방법
- Delegate
1. Noun (집단의 의사를 대표하는) 대표(자)
2. Verb (권한업무 등을) 위임하다
- CallBack
3. Noun 컴퓨터 (컴퓨터나 전화 사용자의) 회신
13.1. Delegate
* 대리자는 메소드에 대한 참조다.
* 목적: “값”이 아닌 “코드” 자체를 매개변수로 사용해 다형성을 이룬다.
* 컴퓨터에 어떤 사건(Event)가 일어나면, 그 사건에 반응해서 기능(Function) 작동
* 이벤트 기반 프로그래밍(Event Driven Programming)
: 마우스 버튼 클릭 , 이메일 도착, 파일 복사 완료, 외부 장치 연결
- 순서
: Compare Comparer, 대리자는 참조 타입이다. 그러므로, 선언 후 인스턴스를 할당해야 한다
: new Compare( AscendCompare); 생성된 인스턴스에 연결할 함수를 매개변수로 할당
: Comparer(DataSet[j], DataSet[j+1] 대리자에 메소드를 할당된다면, 대리자 호출시 이 메소드가 실행
* 여러 클래스에서 인터페이스, 추상클래스를 상속받아 특정 함수 패턴을 구현하고 있다면,
대리자를 통해 접근가능한가?
13.2. Generic Delegate
13.3. Delegate Chain
: 대리자 하나가 여러개의 매소드를 동시에 참조할 수 있다.
: 대리자의 참조에 매소드 여러개를 추가하면, 추가된 매소드가 순서대로 실행된다.
13.4. Anonymous Method
: 매서드의 이름이 없는 메서드
: 매개변수 자리에 함수 구현
13.5. Event
이벤트는 대리자에 event 키워드로 수식해서 선언한 것
이벤트: public 한정자라도 클래스 외부에서 호출 불가
대리자: public internal 외부에서 얼마든지 호출 가능
대리자는 대리자대로 콜백 용도로 사용하고,
이벤트는 이벤트대로 객체의 상태 변화나 사건의 발생을 알리는 용도로 구분해서 사용
이벤트를 선언시, 항상 비어있는 익명 메소드로 미리 초기화