Front-end/JavaScript
JS 모듈 1편 - 모듈의 필요성
파리외 개발자
2023. 5. 21. 22:46
Why do we need modules?
Tight Coupling
user = {};
function signin(user) {
var textfield = "text";
}
function isHuman(user) {
// ...
}
// ...more extends
// tight coupling
만약 위와 같은 signup과 isHuman이라는
user 인자를 받아서 처리를 하는 두 함수가 있다고 보자,
user객체에는 두 함수에 필요한 모든 데이터를 저장할 필요가 있을 것이다.
그리고 user를 사용하는 함수가 계속해서 늘어나면 날수록
coupling은 더 높아지게 된다.
user객체를 함부로 수정했다가는 연관되는 함수들에서
파생되는 문제가 커지게 되기 마련이다.
<script src="./script1.js"></script>
<script src="./script2.js"></script>
<script src="./script3.js"></script>
그럼 이 문제를 여러 js파일로 그룹화해서 관리하면 어떨까?
아래 예시를 보자
// script1.js
var harry = "potter";
var voldemort = "He who must not be named";
function fight(char1, char2) {
var attack1 = Math.floor(Math.random() * char1.length);
var attack2 = Math.floor(Math.random() * char2.length);
console.log(attack1, attack2);
return attack1 > attack2 ? `${char1} wins` : `${char2} wins`;
}
fight(harry, voldemort);
//script2.js
var fight = "no way";
1번 js파일에는 fight함수가 있다.
2번 js파일에는 fight변수가 있다.
그럼 html파일을 실행시켰을 때,
fight를 실행시키면 어떻게 될까?
같은 이름으로 겹치기 때문에 뒤에 선언된 script2.js의 내용만 사용할 수 있다.
그렇다고 변수이름을 계속해서 다르게 만들어 줄수도 없기에
모듈 시스템의 개발이 시작되었다.