본문/내용
friend
데이터 추상화에는 맞지 않지만 private나 protected로 선언된 부분을 건드려야 할 때가 있다. 물론 이것을 멤머 함수를 만들어 접근해야 하는 것이 데이터 추상화에 가장 합당하지만 그렇게 하다보면 배보다 배꼽이 더 커져서 함수의 기능은 별 것 아닌데 부가적으로 붙는 함수가 더 많아지는 기현상을 보이게 될 때가 있다.
코딩의 어려움을 차지하더라도 함수 호출에 의한 오버헤드에 의해 전체적인 프로그램 실행 속도가 눈에 띄게 느려지는 경우가 있다.물론 이럴 때 public으로 선언하면 되지만,private나 protected로 선언된 부분을 건드려야 하는 함수의 개수가 그리 많지 않다면 하나의 해결책이 있다. 클래스의 private이나 protected 부분에 접근할 함수명을 클래스내에 써주고 함수명 앞에 friend 키워드를 달아주면 된다.
class Exam{
private:
int value;
public:
Exam(int x){value = x;}
friend void PrintValue(Exam);
};
void PrintValue(Exam a){
cout << a.value << endl;
}
15. 예외 상황
1.예외 상황처리의 문제점
1) 각 경우를 모두 따져서 오류 처리 코딩해야 하기 때문에 배보다 배꼽이 더 큰 격으로 처음 코드보다 오류 처리 코드가 더 커지는 불상사가 발생할 수 있다.
2) 많은 오류 처리 코드가 들어갔을때 프로그램 가독성이 떨어진다.
3) 프로그램에서 복구하지 못하는 오류가 발생했을때 시스템이 다운되거나 종료한다.
4) 프로그램 업그레이드를 할때 예상치 못한 오류가 발생한다.
2. 예외 상황처리
예외상황 처리의 …
던진다.(throw) 그러면 예외를 처리할 수 있는 적합한 핸들러가 이 예외를 붙잡는다.(catch)