Notice
Recent Posts
Recent Comments
Link
250x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- react-query
- react
- CS
- 알고리즘
- typescript
- 웅진씽크빅
- 메모리
- javascript
- 프로젝트캠프
- 프로세스
- 유데미
- cs #네트워크
- 스레드
- React.js
- IT개발캠프
- 개발자부트캠프
- #프로젝트캠프 #프로젝트캠프후기 #유데미 #스나이퍼팩토리 #웅진씽크빅 #인사이드아웃 #IT개발캠프 #개발자부트캠프 #리액트 #react #부트캠프 #리액트캠프
- 스나이퍼팩토리
- ip
- BFS
- html
- 인사이드아웃
- 프로그래머스
- 타입스크립트
- 리액트
- Algorithm
- 해시
- 자바스크립트
- App Runner
- 네트워크
Archives
- Today
- Total
Bin's Blog
오늘의 CS(디자인 패턴 - 노출모듈 패턴) 본문
728x90
1. 노출모듈 패턴이란?
- 노출모듈 패턴은 즉시 실행 함수를 통해 private, public 같은 접근 제어자를 만드는 패턴이다.
- 자바스크립트는 private는 public 같은 접근 제어자가 존재하지 않고 전역 범위에서 스크립트가 실행된다.
- public: 클래스에 정의된 함수에서 접근 가능하며 자식 클래스와 외부 클래스에서 접근 가능한 범위
- private: 클래스에 정의된 함수에서 접근 가능하지만 자식 클래스와 외부 클래스에서 접근 불가능한 범위
- 즉시 실행 함수: 함수를 정의하자마자 바로 호출하는 함수, 초기화 코드, 라이브러리 내 전역 변수의 충돌 방지 등에 사용한다.
const pukuba = (() => {
const a = 1;
const b = () => 2
const public = {
c : 2,
d : () => 3
}
return public;
})()
// { c : 2, d: [Function : d] }
console.log(pukuba);
// undefined
console.log(pukuba.a);
- a와 b는 다른 모듈에서 사용할 수 있는 변수나 함수인 private 범위를 가진다.
- c와 d는 다른 모듈에서 사용할 수 있는 변수나 함수이며 public 범위를 가진다.
- 노출모듈 패턴을 기반으로 만든 자바스크립트 모듈 방식으로는 CJS(CommonJS)모듈 방식이 있다.
* CommonJS 모듈?
- commonJS는 각각의 모듈이 자신만의 독립적인 공간(스코프)에서 동작하도록 하여, 모듈 간에 데이터가 섞이는 것을 방지하고, 필요한 모듈만을 불러와 사용할 수있게 해준다. 이렇게 하면 프로그램의 복잡성을 줄이고, 코드의 재사용성을 높일 수 있다.
- 기본적인 사용 방법 (모듈 생성)
// math.js
exports.add = function(a, b) {
return a + b;
};
- 모듈을 생성하려면 exports라는 객체를 사용한다.
- 모듈 사용
// app.js
let math = require("./math");
// 3
console.log(math.add(1, 2));
- math.js 파일은 add라는 함수를 가진 모듈이고, app.js 파일에서 이 모듈을 불러와 사용하고 있다.
728x90
'CS' 카테고리의 다른 글
오늘의 CS(프로그래밍 패러다임 - 선언형과 함수형 프로그래밍) (0) | 2023.05.16 |
---|---|
오늘의 CS(디자인 패턴 - MVC 패턴, MVP패턴, MVVM 패턴) (0) | 2023.05.15 |
오늘의 CS(디자인 패턴 - 이터레이터 패턴) (0) | 2023.05.11 |
오늘의 CS(디자인 패턴 - 프록시 서버) (0) | 2023.05.08 |
오늘의 CS(디자인 패턴 - 프록시 패턴) (0) | 2023.05.08 |