머피의 법칙이란 "어떤 것이든 잘못될 수 있다면, 그건 그렇게 될 것이다."라는 법칙입니다. 이 법칙은 예외를 쉽게 무시할 수 없는 일에서 가치를 지닙니다. 그리고 게임 프로그래밍은 예외를 무시하기 어려운 대표적인 일입니다. 특히 온라인 게임에선 서버에 발생한 버그 단 한 개가 게임 전체의 운명을 좌우할 수도 있습니다.
버그가 생길 수 없게 만드는 방법은 여러 가지가 있는데, 런타임 강제성이 아니라 컴파일 타임 강제성을 활용하는 것은 활용도가 가장 높은 방법입니다. 대개 팀의 리더는 버그를 방지하려고 다양한 장치를 마련하고, 지속적으로 시험하며, 여러 가지 규칙을 정해 따르도록 합니다. 그렇게 하면 버그의 99.99%는 아마 방지할 수 있을 것입니다. 하지만, 그것보다 더 효과적인 방법은 컴파일 타임 강제성을 활용해 런타임엔 버그가 아예 발생할 수 없게 만드는 것입니다. 100%와 99.99%의 차이는 사소해 보이지만, 게임 개발에서 이 확률의 차이는 결과의 큰 차이를 가져 옵니다.
일반적인 일과 달리, 게임 프로그래밍에선 매크로도 중요하지만 마이크로도 중요합니다. 따라서, 게임 프로그래머는 머피의 법칙에 대해 알아 두는 게 좋습니다.
버그가 생길 수 없게 만드는 방법은 여러 가지가 있는데, 런타임 강제성이 아니라 컴파일 타임 강제성을 활용하는 것은 활용도가 가장 높은 방법입니다. 대개 팀의 리더는 버그를 방지하려고 다양한 장치를 마련하고, 지속적으로 시험하며, 여러 가지 규칙을 정해 따르도록 합니다. 그렇게 하면 버그의 99.99%는 아마 방지할 수 있을 것입니다. 하지만, 그것보다 더 효과적인 방법은 컴파일 타임 강제성을 활용해 런타임엔 버그가 아예 발생할 수 없게 만드는 것입니다. 100%와 99.99%의 차이는 사소해 보이지만, 게임 개발에서 이 확률의 차이는 결과의 큰 차이를 가져 옵니다.
일반적인 일과 달리, 게임 프로그래밍에선 매크로도 중요하지만 마이크로도 중요합니다. 따라서, 게임 프로그래머는 머피의 법칙에 대해 알아 두는 게 좋습니다.

댓글을 달아 주세요
컴파일 타임 강제성 <- 요게 어떤 의미일까요?. 저도 버그 없는 세상에 살고 싶지만 오늘도 버그 고치느라 --; TDD 같은건가요
음 그냥 일반적으로 버그는 프로그램을 실행시켜야 찾을 수 있는데, 실행시키지 않고도 컴파일 타임에 찾아낸다는 의미로 썼습니다.
예를 들면 C++의 const 멤버 함수도 이런 것에 해당합니다. string my_name은 private 멤버 변수이고, my_name과 관련된 public 함수는 오직 const string& get_name() const { return my_name; }뿐이라고 가정해 보겠습니다. 그러면, 외부에선 저 객체의 my_name 값을 올바르지 않은 절차에 의해 변경할 수 없고, 만약 그렇게 직접 접근하려고 하면 컴파일 오류가 나겠죠. 물론, 누군가 귀찮다고 my_name을 public으로 맘대로 바꿔 버리면 의미가 없어집니다.
TDD는 런타임 테스트니까 다른 개념이겠네요.