Thief of Wealth

App객체를 만들었고

new App()을 하자마자 내가 작성한 어플리케이션 코드가 구동된다고 생각해보자.

사실상 App만 할당해주면, 그 안에 선언된 코드들이 실행되어 새로고침할때마다 모든 것이 새로 시작된다!

ex) export.defualt new App();

 

근데 이런 방식은 좋지 않다.

왜냐하면 이는 해당 객체를 범용적으로 사용할 수 없게하고, 추후에 메모리 해제를 동적으로 할 수 없고, 내부의 변수나 함수를 사용할 수도 없기 때문이다.

 

리뷰어님 피드백 발췌

  1. 이렇게 구현하게 되면 파일 안에서만 객체단위의 커뮤니케이션이 이루어질 수 있습니다. 그렇다는 것은 굳이 class가 아니라, function으로 만들고 function을 export만 해도 된다는 이야기 입니다.

  2. export 시 객체를 생성하는 것의 또 다른 문제는, 객체 생성 시점이 코드를 불어들이는 시점과 동일하다는 것 입니다. 그렇다면 전혀 사용하지도 않을 때 메모리 점유를 계속 하고 있다는 것 입니다. 일반적으로 메모리 할당의 영역은, member 변수나 scope 안의 휘발성 변수가 stack 영역에 쌓이고, 동적할당과 같은 경우 heap에 쌓아서 메모리를 유용하게 쓰는데 초점을 맞춥니다. (물론 브라우저에서는 이런 메모리 관리를 가비지 컬렉터나 heap, stack 메모리 관리를 알아서 해주지만요) export로 가져오게 되면, countSelectionTemplate을 가져오는 import 단계에서 파일이 쓰이고 있는 경우 계속 메모리를 갖게되므로 메모리 해제 시점이나 메모리 생성 시점이 비효율적이게 됩니다. 즉 이미 메모리 풀을 크게 들고 있다는 의미이죠. 이러한 자그마한 소프트웨어의 경우 큰 문제는 없겠으나. 커다란 대형 어플리케이션에서는 싱글톤이나 멀티턴 패턴을 제외하고는 이러한 흐름으로 코딩을 작성하는건 별로 좋지 못한 패턴으로 보입니다.

 

차라리 쓴다면

const app = new App();

app.run();

export default app;

 

으로 사용하자

'개발 > Web Programming' 카테고리의 다른 글

HTML과 HTML5  (0) 2021.03.14
로컬 스토리지, 세션 스토리지 정리  (0) 2021.03.14
[웹 접근성] 웹 접근성이란?  (0) 2021.03.12
[웹 접근성] ARIA의 기능  (0) 2021.03.11
[웹 접근성] ARIA 란?  (0) 2021.03.11
profile on loading

Loading...