
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 외부에서 얼마든지 호출 가능
대리자는 대리자대로 콜백 용도로 사용하고,
이벤트는 이벤트대로 객체의 상태 변화나 사건의 발생을 알리는 용도로 구분해서 사용
이벤트를 선언시, 항상 비어있는 익명 메소드로 미리 초기화


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 외부에서 얼마든지 호출 가능
대리자는 대리자대로 콜백 용도로 사용하고,
이벤트는 이벤트대로 객체의 상태 변화나 사건의 발생을 알리는 용도로 구분해서 사용
이벤트를 선언시, 항상 비어있는 익명 메소드로 미리 초기화
