Node.js

Default Export 와 Named Export

Jerry_K 2024. 12. 12. 10:48

이제 막 Node.js를 공부하기 시작했다. 

간단한 오픈 소스를 clone 해서 테스트 해보고 있는데, 이런 코드를 보았다. 

import { Server } from "socket.io";

 

Named Export 형태가 좀 헷갈렸고, 이와 관련해서 정리를 해보고자 한다. 


✨ Default Export (기본 내보내기) 

먼저 Default Export에 대해 간단한 예시를 살펴보자. 

// math.js
export default function add(a, b) {
  return a + b;
}
// main.js
import add from './math.js'; // 중괄호 없이 가져옴
console.log(add(2, 3)); // 5
  • 이와 같은 경우 모듈에서 하나의 값만 내보낼 수 있음
  • 가져올 때 임의의 이름을 사용 할 수 있음 

✨ Named Export (명명된 내보내기) 

이번에는 Named Export에 대한 간단한 예시를 살펴보자

// math.js
export function add(a, b) {
  return a + b;
}

export function subtract(a, b) {
  return a - b;
}
// main.js
import { add, subtract } from './math.js'; // 중괄호를 사용
console.log(add(2, 3)); // 5
console.log(subtract(5, 3)); // 2
  • 모듈에서 여러 값을 내보낼 수 있음
  • 가져올 때 정확한 이름을 사용해야 함

 

정리하자면 Default Export 같은 경우 하나만 내보내기 때문에 이름이 중요하지 않고,

Named Export 같은 경우 여러개를 내보내기 때문에 이름이 중요하다. 


🔗Named과 Default export 구분하기 

그렇다면 그 모듈이 Named Export인지 아닌지를 어떻게 알 수 있을까 ? 

 

ex) socket.io

// test.js
import * as Module from "socket.io"
console.log(Module);

 

단순하게 위에처럼 작성해주면, 아래와 같은 결과가 출력이 된다.

$ node test.js
[Module: null prototype] {
  Namespace: [class Namespace extends StrictEventEmitter],
  Server: [class Server extends StrictEventEmitter],
  Socket: [class Socket extends StrictEventEmitter]
}

 

그렇다면 socket.io 라이브러리에서 Namespace, Server, Socket 같은거를  호출 할 때에는 

Named Export 형태로 출력해야한다. 

 


🔗 원하는 텍스트 찾기

해당 클래스를 찾고 싶으면 아래와 같은 명령어로 쉽게 찾을 수 있다. 

(Vs Code 검색창에서도 잘 안찾아질때, 이렇게 찾으면 엄청 편하다 !! )  

grep -r "찾고자 하는 이름"  <경로>
  • grep은 Global Regular Expression Print
    • 전체 텍스트에서 정규 표현식으로 검색 후 출력
  • -r 은 Reculsive로 재귀적으로 디렉토리 내 모든 파일 검색

 

ex) Server 클래스를 찾는 경우 

grep -r "class Server" node_modules/socket.io

 

[출력 결과]

$ grep -r "class Server" node_modules/socket.io
node_modules/socket.io/dist/index.d.ts:export declare class Server<
node_modules/socket.io/dist/index.js:class Server extends typed_events_1.StrictEventEmitter {
  • Server 클래스는 node_modules/socket.io/dist/index.js이 경로에 존재 

'Node.js' 카테고리의 다른 글

싱글톤 패턴 (Singleton 패턴)  (0) 2024.12.16
Java script에서 Promise 란 ? (+@ Async / Await)  (0) 2024.12.12