콘텐츠로 이동

Mutable Global State

2.5 변경 가능한 전역 상태

변경 가능한(mutable) 전역 상태의 사용을 지양하세요.

2.5.1 정의

프로그램 실행 중에 변경될 수 있는 모듈 수준의 값 혹은 클래스 속성들입니다.

2.5.2 장점

때때로 유용합니다.

2.5.3 단점

  • 캡슐화(encapsulation) 파괴: 이러한 설계는 유효한 목표를 달성하기 어렵게 만들 수 있습니다. 예를 들어, 데이터베이스와의 연결을 관리하기 위해 전역 상태가 사용된다면, 서로 다른 두 데이터베이스를 동시에 연결하는 것(마이그레이션 도중에 변경점을 계산하는 경우 등)이 어려워집니다. 전역 레지스트리에서도 비슷한 문제가 발생하기 쉽습니다.
  • 임포트 과정에서 모듈의 동작이 달라질 수 있습니다. 이는 전역 변수에 대한 할당이 모듈을 처음 임포트할 때 수행되기 때문입니다.

2.5.4 권장 사항

변경 가능한 전역 상태의 사용을 지양하세요.

전역 상태의 사용이 용인되는 몇몇 특수한 경우에서, 변경 가능한 전역 엔티티는 반드시 모듈 수준에서 정의되거나 클래스 속성으로서 정의되어야 하며, 이름의 앞에 _를 추가해 내부(internal) 변수로 만들어져야 합니다. 변경 가능한 전역 상태에 대해 외부에서 접근할 필요가 있다면, 이는 반드시 공개된(public) 함수 혹은 클래스 메소드에 의해 수행되어야 합니다. 아래의 이름 짓기를 참고하세요. 또, 변경 가능한 전역 상태를 사용하도록 설계한 이유를 주석에서 설명하거나, 이를 설명하는 별도의 문서 링크를 주석으로 첨부해주세요.

모듈 수준의 상수를 사용하는 것은 허용되고 장려됩니다. 예를 들어, 내부적(internal)으로 사용되는 _MAX_HOLY_HANDGRENADE_COUNT = 3 변수나, 공개된(public) API 상수 SIR_LANCELOTS_FAVORITE_COLOR = "blue"와 같이 선언할 수 있습니다. 상수의 이름은 영문 대문자와 언더스코어만 사용하도록 지어야 합니다. 아래의 이름 짓기를 참고하세요.