JS 뿌리를 지탱하는 기술

짜리몽땅개발자·2022년 3월 6일
0

Intro

누구나 생각할 수 있는 지탱하는 기술에 대해서 알아보도록 하겠다.

자바스크립트에서 스코프 영역에 대해서 심각하게 고민하며 코딩을 해본적이 있었던가?
전역변수와 지역변수에 차이를 잘 알고 있는가?
this가 가리키는 객체가 정확하게 어디까지 인지 알고 있는가?
호이스팅에서 대해서 알고 있는가?

이런 질문들을 듣고 답해야 하는 상황이 올때마다 시근땀이 흘린다면 앞으로는 이런 시근땀이 안나도록 확실하게 짚고 넘어가 보겠다. 물론 나도 공부하는 차원에서 정리하는 내용이니 혹여나 틀렸거나 잘못된 내용이 있다면 너그럽게 용서를 구한다. 그리고 댓글로 수정사항을 피드백 준다면 아주 고맙게 생각하고 수정 하겠다.

스코프

스코프에 종류에는 동적스코프와 정적스코프가 존재한다.
동적스코프에 대표적인 언어는 perl, bash 같은 스크립트 언어들이다.
동적스코프에 특징은 마지막 변수값으로 값이 바뀌는 원리이다. 언어 설계를 왜 이렇게 한지 모르겠지만, 이게 편리 할때도 있고, 불편 할때도 있는 것 같다. 편리 할때라고 한다면, 가까운 최종변수값이 마지막값으로 출력되기때문에 상대적으로 상태값 관리가 유리한 것 같다. 실수를 줄일 수 있으니 말이다. 그리고, 불편한점은 기존에 알고 있는 관례나 전역/지역 관계가 무시 되기 때문에 기존 관습을 생각하면서 코드를 본다면 햇갈리는 현상이 있는 것 같다.

전역변수와 지역변수

다음으로는 전역변수에 대해서 아는데로 적어 보겠다. 전역변수는 가장 범위가 넓은 변수이다. 하지만 괄호 영역이나 함수 영역 안에 사용하는 똑같은 이름에 변수와 공유 되지는 않는다. 즉 이말은 지역변수에 이름이 같다고 해서 괄호나 함수안에서 값을 변경하고 새롭게 선언하더라도 전역변수에 영향을 주지 못한다. 그럼 지역변수란 괄호와 함수안에서만 사용하는 변수라고 인지하면 편하다.
더욱 복잡한 특징은 책이나 인터넷을 참고 바란다.

this

this에 대해서 할말은 굉장히 많고, 예제도 많다. 내가 여기서 말하고 싶은건 this에 접근 방법과 this가 가르키고 있는 객체만 다룰 것이다. 이 외적인 부분은 스스로 공부하거나 인터넷이나 책을 참고하기 바란다.
전역 영역에서 this를 선언하면 window 객체를 가르킨다. 놀랍지도 않다. 당연한 애기 아닌가? 그럼 일반함수에서 사용하는 this는 누구를 가르킬까? 이것또한 window 객체를 가르킨다. 이 또한 신기한 일이 아니다. 그럼 리터널 object 안에서 사용하는 this는 누구를 가르킬까? 이것은 오브젝트 자신을 가르킨다.
event listner에서 가르키는 this는 신기하게도 e.currentTarget이다. 뭔가 점점 복잡해 지는가? 만약 본인이 이런 내용을 듣보잡이나 잘 모르겠다면, 연습부족이나 훈련부족이 부족하다고 보면 된다. 계속 짜보고 다뤄 보면 이런 부분은 자연스럽게 터득이 될 것이다.

호이스팅

그럼 마지막으로 호이스팅에 대해서 다뤄보자. 호이스팅은 그리 어려운 원리가 아니다. 평가와 실행이라는 단어만 외우고 있으면 쉽게 이해 된다. JS에서는 내가짠 코드를 실행하기 전에 평가라는 단계를 거치는데 이때 선언한 변수나 함수들을 위로 배치하고 실행하는 코드는 아래로 배치한다. 그렇기 때문에 내가 선언하지 않은 변수를 사용해도 undefined 라는 초기값으로 설정이 된다. 다만 요즘 나온 let, const는 호이스팅 자체가 안된다. 초창기 스크립트 설계에 실수였다고 인정이라도 한듯 호이스팅이 되지 않도록 브라우저 엔진 마다 그런식으로 구현이 되어 있다. 혹여나 미리 선언하지 않은 변수를 사용하고 한참뒤에 let이나 const를 사용했다면 undefined가 나오지 않았다고 실망하지 마라. 그건 자연스런 현상이니 인정하고 외우고 넘어가자.

결론

이상 오늘은 스크립트 뿌리를 지탱하는 기술들에 대해서 간단하게 알아봤다. 간단한 코드들이 있었으면 금상첨화 였을텐데 아쉽긴 하다. 오늘은 코딩할 기분이 들지 않아서 코딩 예제는 생략했다. 코드가 없다고 실망하셨다면 용서를 구한다. 개발자는 코드로 애기할수도 있지만, 코드가 없어서 글과 설명으로 상대방을 이해 시키는 연습을 많이 해야 한다고 개인적으로 많이 생각한다.

profile
시간은 돈과 바꿀 수 있다.

0개의 댓글