-
Notifications
You must be signed in to change notification settings - Fork 10
/
0020.txt
3 lines (2 loc) · 2.43 KB
/
0020.txt
1
2
3
제가 쓰는 C++11의 기능 중 하나로 static_assert라는 게 있어요. static_assert가 뭐냐면 assert라는 건 많이 써보셨을 거 같은데 실행 도중에 특정 조건을 충족하지 못하면 디버그 오류(Debug Error)를 내는 거거든요. 게임 만드는 사람들 입장에서는 예외 처리(Exception Handling)를 잘 안 해요. 성능 상의 문제도 있고... 그래서 개발 도중에 충분히 에러를 많이 잡기를 위해서 assert를 상당히 많이 쓰는데 assert의 문제점은 실행 도중에만 assert를 확인할 수 있다는 거예요.
근데 그 외에도 컴파일 도중에 확인할 수 있는 assert가 상당히 많거든요. 예를 들면은 5바이트(byte) 크기의 구조체(Structure)를 하나 만들었고 그 구조체를 이제 저장장치에서 읽어 와서 쓰는데 나중에 크기가 늘어나면 문제가 생길 수 있는 경우라면, 간단히 컴파일 도중에 그 구조체가 5 바이트인지 확인해서 그게 아닌 경우 컴파일 오류를 내도록 하는 그런 방법이 바로 static_assert에요. 사용하는 법은 사실 어렵지 않아요. assert 같은 경우에는 assert (조건) 이렇게 하는 거잖아요? static_assert는 assert 대신 static_assert만 쓰면 돼요. 근데 컴파일 시간에 판단할 수 없는 조건이라면은 컴파일 도중에 오류가 나와서 '이것은 static_assert에 쓸 수 없다'라고 얘기해줄 거고요. 그런 게 아니라면은 static_assert는 문제가 없으면 컴파일이 되는 거고 문제가 있으면 컴파일 오류가 나는 거죠. 개인적으로 좋아하는 이유가 실행할 때 쓰는 assert는 실제 그 코드를 실행하기 전에는 절대 모르거든요. 근데 static_assert는 코드를 반드시 실행하지 않아도 그 코드가 컴파일될 때 발생이 되기 때문에 상당히 많은 오류를 미리 잡을 수 있다는 장점이 있어서 저는 static_assert 상당히 많이 쓰고 있고요. C++11에서 지원하기 전에는 이상한 꼼수로 비슷하게 흉내 내서 쓰기도 했었어요. 이제는 다행히 그럴 필요가 없으니깐 static_assert를 많이 쓰면 좋아요. 그리고 제가 봤을 때는 훌륭한 프로그래머는 assert 하고 static_assert를 굉장히 많이 쓰더라고요. 왜냐하면 버그 잡기가 빠르니깐... 그래서 혹시라도 static_assert를 안 쓰셨던 분들은 열심히 써주시면 될 거 같아요.