Skip to content

week01 jwcho

jwcho edited this page Feb 25, 2023 · 2 revisions

변수 메모리 할당 시점

  1. 전역변수 - 어플리케이션 실행 시
  2. 지역변수 - 변수가 해당하는 함수 실행 시

ex)

function foo() {
  var x = 'local';
  console.log(x);
  return x;
}
foo();

실행 순서

  1. x변수 선언
  2. x변수에 undefined로 초기화
  3. 함수 실행
  4. x변수에 값이 할당
  5. 함수 종료 시 변수 x는 삭제
  6. 변수의 값은 메모리에 할당되어 있음
  7. 추후 가비지콜렉터에 의해 메모리 공간 해제 후 메모리 풀에 반환

전역변수의 문제점

  1. 암묵적 결합
  • 모든 코드가 전역 변수르 참조하고 변경 할 수 있는 문제점
  1. 긴 생명 주기
  • 전역 변수에 의해 메모리 리소스도 오랜 기간 소비됨
  1. 스코프 체인 상에서 종점에 존재
  • 전역 변수가 가장 마지막에 검색된다.( 검색 속도가 가장 느리다. )
  1. 네임스페이스 오염
  • 전역 스코프를 공유하기 때문에 휴먼에러 발생 가능성이 많다

전역변수 사용 억제 방법

  1. 즉시 실행 함수
(function() {
  var foo = 10; //즉시 실행 함수의 지역 변수
}());
  1. 네임 스페이스 객체
var obj = {}; //전역 네임스페이스 객체
obj.name = 'name';
console.log(obj.name);
  1. 모듈 패턴
  • 자바스크립트의 경우 public, private, protected등 접근 제한자를 제공하지 않기 때문에 모듈 패턴을 통해 정보 은닉을 구현한다.
var Counter = (function() {
  var private_value = 0;  //private변수
  return {
    increase (){
      return ++private_value;
    },
    decrease (){
      return --private_value;
    }
  }
})
console.log(Counter.private_value);    //undefined

console.log(Counter.increase());       // 1
console.log(Counter.increase());       // 2
console.log(Counter.decrease());       // 1
console.log(Counter.decrease());       // 0
  1. ES6 모듈 사용
  • ES6 모듈은 파일 자체의 독자적인 모듈 스코프를 제공
  • 따라서 var로 선언한 변수도 전역변수가 아니며 window객체의 프로퍼티도 아니게 된다.
<script type="module" src="test1.mjs"></script>
<script type="module" src="test2.mjs"></script>

Clone this wiki locally