전역 변수는 왜 문제가 될까?
전역 변수의 사용은 C++뿐만 아니라 모든 프로그래밍 언어에서 가급적 피해야 합니다. 그 이유는 전역 변수가 전역 네임스페이스(namespace)를 오염시키고, 프로그램의 어느 파일에서든 접근하고 수정할 수 있기 때문에 규모가 큰 프로젝트에서는 매우 성가신 버그를 유발할 수 있기 때문입니다.
전역 변수가 나쁜 이유
코드의 어느 부분에서든 전역 변수를 변경할 수 있기 때문에, 가능한 모든 사용 지점을 기억하거나 추론하기가 어렵습니다.
전역 변수에는 접근 제어(access control)가 존재하지 않습니다. 프로그램의 특정 부분으로 접근 범위를 제한할 방법이 없습니다.
전역 변수를 사용하면 코드 간에 매우 강한 결합(tight coupling)이 발생합니다.
전역 변수는 네임스페이스 오염을 일으킵니다. 이로 인해 의도치 않게 전역 값이 재할당되는 상황이 생길 수 있습니다.
전역 변수를 사용하는 프로그램은 테스트하기가 매우 까다롭습니다. 테스트 시 전역 상태와 코드를 분리(decouple)하기 어렵기 때문입니다.
그래도 전역 변수를 써야 한다면?
물론 때로는 어쩔 수 없이 전역 변수를 사용해야 하는 경우도 있습니다. 하지만 그렇게 하기 전에 반드시 다른 대안이 없는지 먼저 확인하는 습관이 중요합니다. 예를 들어 함수 인자로 값을 전달하거나, 클래스 멤버 변수로 관리하거나, 싱글턴 패턴 등 더 안전한 설계 방식을 고려해 볼 수 있습니다.
전역 변수가 왜 위험한지에 대해 더 자세히 알아보려면 c2 위키의 GlobalVariablesAreBad 문서를 참고하시기 바랍니다.