전역 변수의 문제점

전역 변수와 지역 변수의 생명 주기 차이

전역 변수는 프로그램이 시작되는 순간 메모리에 할당되며, 애플리케이션이 종료될 때까지 존재한다. 이는 브라우저 환경에서 페이지를 닫거나 서버 프로세스가 종료되기 전까지 지속적으로 메모리를 점유함을 의미한다. 반면 지역 변수는 함수 호출 시 생성되어 실행 컨텍스트가 종료되는 즉시 가비지 컬렉션 대상이 되며, 블록 스코프 변수(let/const)는 해당 블록을 벗어나면 즉시 접근이 불가능해진다. 이러한 생명 주기 차이는 장시간 실행되는 시스템에서 메모리 누수를 유발할 수 있다.

전역 변수의 주요 문제점

  1. 암묵적 결합 위험성
    • 모든 모듈이 전역 변수를 자유롭게 수정할 수 있어, 코드의 특정 부분을 수정할 때 예상치 못한 부작용이 발생하기 쉽다.
  2. 디버깅 난이도 상승
    • 값이 변경되는 지점이 코드 전체에 분산되어 있기 때문에 상태 변화를 추적하는 데 많은 시간이 소요된다.
    1. 테스트 환경 오염
    • 단위 테스트 시 테스트 케이스 간 상태가 서로 영향을 미치게 되어 독립적인 테스트 실행이 어렵다.

전역 변수 사용 억제 전략

이처럼 전역 변수는 수많은 문제점을 가지고 있으므로 전역 변수를 반드시 사용해야 하는 이유가 없다면 지역 변수를 사용하는 것이 권장된다.

  • 즉시 실행 함수(IIFE) 활용
    함수 선언과 동시에 호출해 독립적인 실행 환경이 생성되며, 사용된 변수가 가비지 컬렉션에 의해 수집된다.
  • 네임스페이스 객체 패턴
    모든 변수를 하나의 객체에 속성으로 등록하여 변수 충돌 위험을 최소화하고 기능별 계층 구조 명확화한다.
  • 모듈 패턴 적용
    IIFE(즉시 실행 함수 표현식)나 ES6 모듈 시스템을 활용해 변수의 유효 범위를 제한하는 것.
  • 상태 관리 체계화
    React Context API, Redux, Vuex 등의 상태 관리 도구를 도입해 중앙 집중식 데이터 흐름을 구성하는 것
  • 의존성 주입 방식
    필요한 데이터를 함수 매개변수로 명시적으로 전달하는 것.
  • 코드 검증 도구 활용
    ESLint의 no-global-assign 규칙을 활성화해 실수로 인한 전역 변수 생성을 방지하는 것.
profile
개발 공부 내용을 포스팅 중입니다.

0개의 댓글