지난주에 3차과제 피드백을 받았습니다.
제 우여곡절을 적은글은 여기에서 볼수있습니다.
제 과제를 리뷰해준 동료분들도 너무나도 좋은것을 지적해 주셨었고 멘토님도 많은 리팩토링 방안을 제시해주셨습니다.
그러나 저를 밤늦게까지 잠들지 못하게 한 리뷰가 하나 있었는데....
바로 "모듈화" 였습니다.
이 질문을 하게 된 계기는, 다른 동료분들의 과제물들을 읽어보다가 다들 프로젝트의 구조(main.js의 역할)가 천차만별이었기 때문입니다.
1번부류는
저와 같이 main.js에서 대부분의 파일을 불러오고 export로 다른 모듈화 js들로 쏘아주는 방법이었고
2번부류는
main.js에도 적당히, 또 대부분의 불러오기는 각 JS에서 수행하는 방법,
3번부류는
하나의 파일(store.js)을 불러오기용으로 생성해놓고 해당파일에서 다 쏴주는 방식
정도가 있었습니다.
그래서 이중에서 어떠한 방법을 쓰는것이 가장 좋을지 멘토님한테 질문을 드렸었고 답변을 정리하자면
따라서 제가 한 1번부류가 가장 적합하지가 않은 방법이었던 것 같습니다...
그런데 여기서 궁금증이 생겼습니다.
만약 3번부류와 같이, store.js
와 같은 파일에 모든 DOM을 불러오고, 그것을 export하여 각 파일들에서 import받아 사용을 한다면, 그 파일은 main.js
와의 의존성이 전혀 없는것이 아닌가?????
즉, js의 진입점은 main.js
이므로, 만약 모든 로직이 특정 feature.js
와 store.js
사이에서만 이루어진다면 main.js
는 feature.js
의 존재를 모르는것이 되지 않나? 가 의문이었습니다.
제가 기존에 코딩했던 스타일은 다음과 같습니다.
main.js
<======> feature.js
두 파일 사이에서 DOM변수든, 함수든 서로 넘겨주는 작업을 하면서 의존성이 생겨 feature.js
를 읽을수 있었지만,
main.js
|벽| feature.js
<======> store.js
이렇게 되버린다면 프로그램은 feature.js
의 존재자체도 모르지 않나 싶었습니다.
순간 새벽에 너무나도 궁금해서 멘토님한테 질문도 드리고 동료 수강생분들께도 이러한 생각을 해본적없냐 물어봤었고 이때 제 개인적으로 정리하게 된것이
store.js
와 별개로, main.js
가 참조하는 파일이면 해당 파일에서는 DOM과 같이 엘리먼트들을 직접 호출할수있음(2번부류).위 세가지 입니다.
여전히 의존성에 대한 것의 답변은 되지 못했으나...
다음날 멘토님의 답변을 받았습니다.
결론은 feature.js
를 다른 파일에서 의존하지 않는경우가 올바른 설계라면 생기지 않는다고 합니다.
그러면 뭐가 올바른 설계지?... 싶어서 혼자서 많은 고민을 해봤고
답변을 바탕삼아 제 나름의 방법론을 세워봤습니다.
main.js
에 빼놓고, 그에 필요한 함수만 feature.js
에서 import받습니다. 그렇다면 프로그램은 feature.js
에 무리없이 진입하게 될것입니다.store.js
에 모든 DOM을 선언하고, import받아올수 있겠지만, 더 좋은 방법은 그냥 각 feature.js
에서(진입한것이 확실하므로) DOM들도 선언해주면 되는것입니다.이렇게 두가지 방법을 지킨다면, main.js
는 자기의 역할도 다할것이고, 모듈화도 더욱더 효율적이고 가독성을 높일수있을것 같습니다.
지난주 새벽에 모듈화 때문에 참 가슴이 답답했는데 나름의 방법을 결정한것 같아 다행입니다 😀