글로벌은 그렇게 나쁘지 않습니다. 몇 가지 다른 답변에서 언급했듯이, 실제 문제는 현재 글로벌 폴더 경로가 내일, 수백 또는 수백 중 하나 일 수 있다는 것입니다. 빠른 일회성 프로그램을 작성하는 경우 더 쉬운 경우 전역을 사용하십시오. 그러나 일반적으로 하나만 필요하다고 생각할 때에도 배수를 허용하는 것이 좋습니다. 갑자기 두 개의 데이터베이스 와 통신해야하는 복잡한 대규모 프로그램을 재구성해야하는 것은 좋지 않습니다 .
그러나 그들은 신뢰성을 손상시키지 않습니다. 모든 이 예기치 않게 변경되면 프로그램의 여러 곳에서 참조 데이터는 문제가 발생할 수 있습니다. 열거하는 컬렉션이 열거 중간에 변경되면 열거자가 질식합니다. 이벤트 큐 이벤트는 서로 트릭을 재생할 수 있습니다. 스레드는 항상 문제를 일으킬 수 있습니다. 지역 변수 또는 변경 불가능한 필드가 아닌 것은 문제입니다. 글로벌은 이런 종류의 문제이지만, 비전 역으로 만들어서 고칠 수는 없습니다.
파일에 쓰려고하고 폴더 경로가 변경되면 변경 내용과 쓰기를 동기화해야합니다. (잘못 될 수있는 수천 가지 중 하나 인 경우 경로를 잡고 해당 디렉토리가 삭제 된 다음 폴더 경로가 좋은 디렉토리로 변경된 다음 삭제 된 디렉토리에 쓰려고 시도합니다.) 폴더 경로가 전역이거나 프로그램에서 현재 사용중인 천 중 하나입니다.
큐의 다른 이벤트, 다른 수준의 재귀 또는 다른 스레드에서 액세스 할 수있는 필드에는 실제 문제가 있습니다. 간단하고 간단하게 만들려면 지역 변수가 좋고 필드가 나쁩니다. 그러나 전 세계 지구 는 여전히 현장이 될 것이기 때문에이 문제 (중요하지만 중요한) 는 전 세계 분야의 양호 또는 악 상태에 적용 되지 않습니다 .
추가 : 멀티 스레딩 문제 :
이벤트 큐 또는 재귀 호출과 비슷한 문제가 발생할 수 있지만 멀티 스레딩은 최악입니다. 다음 코드를 고려하십시오.
if (filePath != null) text = filePath.getName();
경우 filePath
지역 변수 또는 상수의 일종이며, 프로그램이되어 있지 때문에 실행하는 경우 실패 할 것 filePath
null입니다. 수표는 항상 작동합니다. 다른 스레드는 그 값을 변경할 수 없습니다. 그렇지 않으면 보장 할 수 없습니다. Java로 멀티 스레드 프로그램을 작성하기 시작했을 때 항상 이와 같은 줄에 NullPointerException이 발생했습니다. 어떤다른 스레드는 언제든지 값을 변경할 수 있으며 종종 변경됩니다. 다른 답변이 지적했듯이 테스트에 심각한 문제가 발생합니다. 위의 내용은 10 억 번 작동하여 광범위하고 포괄적 인 테스트를 거친 다음 생산 과정에서 한 번 폭파 될 수 있습니다. 사용자는 문제를 재현 할 수 없으며 자신이 물건을보고 잊어 버렸다고 확신 할 때까지 다시 발생하지 않습니다.
전역은 분명히이 문제가 있으며 완전히 제거하거나 상수 또는 지역 변수로 대체 할 수 있다면 매우 좋습니다. 웹 서버에서 상태 비 저장 코드가 실행중인 경우 가능합니다. 일반적으로 데이터베이스에서 모든 멀티 스레딩 문제를 해결할 수 있습니다.
그러나 프로그램이 한 사용자 작업에서 다음 사용자 작업까지 기억해야하는 경우 실행중인 스레드에서 필드에 액세스 할 수 있습니다. 비전 역 필드로 전역을 전환해도 안정성에 도움이되지 않습니다.