: exception을 배우는 과제이다. try, catch구문을 만들어 보고 추상클래스를 사용해 보는 과제이다.
: 아스키 트리가 필요할 때가 발생한다. 아래의 링크에서 복사하면 된다.
링크 : https://ascii.co.uk/art/tree
: 모두의코드 예외처리 부분이다. 한번쯤 읽어보고 과제를 진행하면 어렵지 않게 진행할 수 있다.
링크 : https://modoocode.com/230
: cpp module05는 ex가 진행됨에 따라 기능이 계속 붙는다고 생각하면 된다. ex00에서는 공무원을 만든다.(이 공무원이 나중에 문서를 싸인한다.)
c에서는 예외처리를 아래와 같은 형태로 하였다.
if(!(NULL))
return (NULL);
다른 언어를 사용해보면 알겠지만, 이는 꽤나 비효율적이다. 예외처리를 위한 예외처리를 위한 예외처리를 위한....
cpp에서는 예외처리를 할 수 있는 exception을 제공하고 try - catch구문에서 사용해 볼 수 있다. 일상적으로는 try에 있는 구문이 실행되며, 오류가 발생한다면 catch로 바로 점프해서 가게 된다.(오류 발생 아래 지점부터는 try에서 실행하던 코드를 실행하지 않고 바로 catch로 간다) try에서 실행했던 코드들 중에서 메모리를 가지고 있는 대상이 있으면 메모리 또한 해제를 해준다. 굉장히 편한 도구이다.
exception은 아래와 같이 만들어 주면 된다. 클래스를 따로 만들어 줘도 되겠지만 이런식으로 클래스 안에 하나를 만들어 주었다.
//Test.h
class Test
{
class TestException : public std::exception
{
public:
const char* what() const throw();
}
public:
void testMethod();
private:
void _test;
}
//Test.c
const char* Test::TestException::what() const throw()
{
return ("Exception!!!!");
}
위에서 중요한 것은 exception은 std::exception을 상속받아서 활용한다는 점이다. 그리고 아래의 what()은 exception에서 virtual로 되어 있는 가상 함수이다. virtual keyword를 제일 앞에 써도 되고, 안쓰면 자동으로 virtual이 붙는다고 생각하면 된다.
virtual const char* what() const throw();
링크 : https://en.cppreference.com/w/cpp/error/exception/what
try
{
//진행시키고 싶은 코드들
}
catch(const std::exception &e)
{
//예외가 발생하면 실행시키고 싶은 코드들
//보통 e를 넘겨 받고 이 안에 정보를 던지는
//형태로 만들기 때문에 이런식으로 활용을 해준다.
std::cerr << e.what() << std::endl;
}
: ex00에서 공무원을 만들고 등급을 높이고 낮췄다면, 여기서는 문서(클래스)를 만든다. 그리고 문서는 공무원이 싸인을 할 수 있다. 등급에 따라서 싸인을 할 수 있을지 없을지가 결정된다.
: ex02에서는 ex01에서 만든 문서의 양식을 바탕으로 3가지의 양식을 만든다.(Form Class를 상속받아서 3가지의 문서가 만들어진다.)
: ex03에서는 인턴 클래스를 하나 만든다. 이 인턴은 문서를 만들수만 있지 싸인을 하거나 실행을 할 수는 없는 대상이다. 인턴으로 문서를 만들고 사인을 한 후에 실행을 하는 그런 스토리이다.
실행을 하면 아래와 같이 나오게 된다.
: try-catch 구문을 사실 파이썬과 자바에서 사용을 해본적이 있지만 이렇게 exception을 컨트롤 해본적은 없었던 것 같다. 이 부분을 직접 만져보니 exception이 발생 했을때 어떻게 동작하는지 알 수 있어서 좋았다.