12-1. Global 오브젝트 / Global 오브젝트 개요, Global 함수, 변수
Global 오브젝트 개요
모든 <script>를 통해 하나만 존재
- new 연산자로 인스턴스 생성 불가
- 모든 코드에서 공유
HTML 파일에 script 태그에 src 속성을 통해 자바스크립트 파일을 불러오고 자바스크립트 파일에 자바스크립트 코드를 작성합니다.
이러한 자바스크립트 파일을 3개를 작성했다고 가정하겠습니다.
그러면 new String
같은 경우에는 여러번 만들 수가 있죠?
그런데 Global 오브젝트는 하나만 존재하기 때문에 만들 수가 없습니다.
따라서 new 연산자로 인스턴스 생성이 불가능합니다.
어쩌면 하나만 존재하기 때문에 생성할 필요가 없는 것입니다.
또한 모든 코드에서 공유합니다.
예를 들면 a.js 파일에서 global 오브젝트에 프로퍼티를 설정했습니다.
그리고 b.js 파일에서 a.js 파일에서 설정한 global 오브젝트 프로퍼티를 사용할 수 있습니다.
파일이 달라도 전체가 하나이므로 모든 코드에서 값을 공유할 수 있습니다.
이름(Global)은 있지만
- 오브젝트 실체가 없음
- 오브젝트 작성(사용)할 수 없음
그런데 global 이름은 있지만 오브젝트 실체가 없습니다.
그런데 가져다 쓸 수는 있습니다.
구조적으로 조금 맞지 않죠?
그런데 이것이 또 자바스크립트의 구조이기도 합니다.
예를 들면, global 오브젝트에 프로퍼티를 설정할 때는 오브젝트 이름을 작성하지 않고 프로퍼티 이름만 작성한다라는 것입니다.
우리가 String.length
를 하게되면 값이 출력되잖아요? length 값이요.
그런데 global은 global은 작성 안하고 length만 작성하는 것입니다.
그러면 자바스크립트 엔진이 global 오브젝트라 간주하고 global 오브젝트에 있는 프로퍼티 값을 구한다는 겁니다.
이것이 일반적인 우리가 생각하는 자바스크립트 구조에 맞진 않지만, 이것이 또 하나의 구조라는 것입니다.
Global 오브젝트 함수, 변수
Global 오브젝트의 함수, 변수를
- Global 함수, Global 변수라고 부름
함수 안에 작성한 것
- 지역 함수, 로컬(Local) 함수라고 부름
- 지역 변수, 로컬 변수라고 부름
함수 안에 작성한 함수를 지역함수, 함수 안에 작성한 변수를 지역변수라고 부릅니다.
일반적으로 ‘함수’라고 지칭하면 함수 안에 작성한 지역함수를 뜻합니다.
따라서 Global 함수와 Global 변수는 꼭 앞에 Global 이라고 지칭할 필요가 있습니다.
그런데 코드를 보면 앞뒤 문맥으로 Global 함수인지 아닌지 알 수 있습니다.
그런데 확연하게 구분해야할 필요가 있다면 Global, 지역 이렇게 구분해줄 필요가 있습니다.
전역 객체라고 부르기도 하지만
- Global은 오브젝트 이름
- 강좌에서는 Global(글로벌) 오브젝트로 표기
그런데 Global 오브젝트를 전역객체라고도 합니다.
- 전역 = Global
- 객체 = Object
그런데 저는 뉘앙스가 조금 다르다고 생각합니다.
그래서 이 강좌에서는 Global 오브젝트라고 표기하겠습니다.
왜냐면 Global 오브젝트에서 Global은 오브젝트 이름입니다.
String, Number 오브젝트와 같이 그런 오브젝트 이릅입니다.
그런데 Number 오브젝트를 ‘숫자 객체’, String 오브젝트를 ‘문자열 객체’.. - 이렇게는 저는 잘 사용 안하는 용어입니다.
그래서 Global 오브젝트를 ‘전역 객체’라고 부르기 보다는 Global은 이름이니까 이름 그대로 부르는 것이 나을거 같아서 강좌에서는 Global 오브젝트로 표기하겠습니다.
그런데 그렇다고 전역 객체를 몰라선 곤란합니다.
왜냐하면 많은 자료와 책에 전역객체라고 기술되어있기 때문입니다.