웹개발/javascript

[자바스크립트] JSDoc 가이드

joamashi 2025. 4. 12. 00:10
반응형

좋아요! 아래는 JSDoc의 기본 가이드와 다양한 예시를 함께 정리한 내용입니다.
JSDoc은 JavaScript 코드에 타입과 설명을 추가하여 문서화 및 코드 자동 완성을 도와주는 주석 기반 도구입니다. TypeScript를 쓰지 않아도 정적 분석과 IDE 지원을 받을 수 있습니다.


🧾 JSDoc 기본 문법

JSDoc은 /** ... */ 블록 주석 안에 @태그 형식으로 작성합니다.

/**
 * 설명 부분
 * @tag 설명
 */

📌 주요 JSDoc 태그와 예시

1. @param: 함수의 매개변수 설명

/**
 * 두 수를 더합니다.
 * @param {number} a - 첫 번째 숫자
 * @param {number} b - 두 번째 숫자
 * @returns {number} 합계
 */
function add(a, b) {
  return a + b;
}

2. @returns 또는 @return: 반환값 설명

/**
 * 현재 시간을 ISO 문자열로 반환합니다.
 * @returns {string} ISO 포맷의 현재 시간
 */
function getCurrentTime() {
  return new Date().toISOString();
}

3. @typedef + @property: 커스텀 타입 정의

/**
 * @typedef {Object} User
 * @property {string} name - 사용자 이름
 * @property {number} age - 사용자 나이
 */

/**
 * 사용자 정보를 반환합니다.
 * @returns {User} 사용자 객체
 */
function getUser() {
  return { name: "Jaei", age: 28 };
}

4. @type: 변수 또는 상수의 타입 지정

/** @type {number} */
const PI = 3.14;

/** @type {Array<string>} */
const fruits = ["apple", "banana"];

5. @callback: 콜백 함수 타입 정의

/**
 * @callback SuccessCallback
 * @param {string} message - 성공 메시지
 * @returns {void}
 */

/**
 * 비동기 작업 후 콜백을 호출합니다.
 * @param {SuccessCallback} callback - 성공 시 호출되는 함수
 */
function doAsyncWork(callback) {
  setTimeout(() => {
    callback("작업 완료!");
  }, 1000);
}

6. @example: 사용 예시 추가

/**
 * 두 문자열을 연결합니다.
 * @param {string} a
 * @param {string} b
 * @returns {string}
 * @example
 * joinStrings("hi", "there"); // "hithere"
 */
function joinStrings(a, b) {
  return a + b;
}

7. @deprecated: 사용하지 말아야 할 함수 표시

/**
 * @deprecated 이 함수는 더 이상 사용되지 않습니다. 대신 newFunc을 사용하세요.
 */
function oldFunc() {
  console.log("예전 방식");
}

📦 다양한 복합 예시

/**
 * 게시글 객체 정의
 * @typedef {Object} Post
 * @property {number} id
 * @property {string} title
 * @property {string} content
 */

/**
 * 게시글 배열을 필터링합니다.
 * @param {Array<Post>} posts - 전체 게시글 목록
 * @param {string} keyword - 포함되어야 할 키워드
 * @returns {Array<Post>} 필터된 게시글 목록
 */
function filterPosts(posts, keyword) {
  return posts.filter(post => post.title.includes(keyword));
}

💡 팁

  • VSCode에서는 JSDoc 주석을 자동으로 생성하려면 /** 입력 후 Enter를 누르면 됩니다.
  • @param, @returns, @typedef는 실무에서 가장 많이 사용됩니다.
  • JSDoc만으로도 정적 타입 검사 툴인 TypeScript 수준의 도움을 받을 수 있어, 점진적인 타입 도입에 좋습니다.

🛠️ JSDoc → TypeScript 마이그레이션 가이드

✅ 기본 원칙

JSDoc으로 작성된 타입 정보를 점진적으로 .ts 또는 .tsx로 이전합니다.

마이그레이션 단계별 전략

① JSDoc만 있는 JS 파일 유지

/** @param {number} x @returns {number} */
function square(x) {
  return x * x;
}

② .ts로 확장자 변경 후 JSDoc 그대로 유지

/** @param {number} x @returns {number} */
function square(x: number): number {
  return x * x;
}

③ 타입 주석(Type Annotation)만 남기고 JSDoc 제거

function square(x: number): number {
  return x * x;
}

💡 커스텀 타입도 이렇게 변환:

/** @typedef {{ name: string, age: number }} User */
type User = {
  name: string;
  age: number;
};

⚙️ JSDoc + ESLint 설정법

🔧 목적

  • JSDoc의 누락, 오타, 순서 등을 자동으로 검사
  • 코드 퀄리티 향상

📦 설치

npm install --save-dev eslint eslint-plugin-jsdoc

📄 .eslintrc.js 또는 .eslintrc.json 설정

module.exports = {
  plugins: ["jsdoc"],
  extends: ["plugin:jsdoc/recommended"],
  rules: {
    "jsdoc/check-tag-names": 1,
    "jsdoc/check-types": 1,
    "jsdoc/require-param": 1,
    "jsdoc/require-returns": 1,
    // 추가 규칙은 필요 시 설정
  },
  settings: {
    jsdoc: {
      mode: "typescript" // JSDoc 타입 검사 강화
    }
  }
};

🔌 VS Code에서 JSDoc 자동 생성 확장 추천

💎 추천 확장 1: Document This

  • /** 입력 후 Enter만 치면 자동으로 JSDoc 생성
  • 함수, 변수, 클래스 등에 대한 주석 자동 완성
  • TypeScript 및 JSDoc 모두 지원

단축키:
Alt + Shift + D → 자동 문서 생성


💎 추천 확장 2: JSDoc Comments

  • 커스터마이징 가능 (작성 형식, 공백 포함 여부 등)
  • 사용 예시 자동 생성 옵션도 있음

💎 추천 확장 3: Auto JSDoc Comment

  • 함수 정의를 감지해 자동 주석 삽입
  • React + JS 프로젝트에서 많이 사용됨
  • 약간의 설정 커스터마이징 필요

poiemaweb.com/jsdoc-type-hintJSDoc을 이용한 JavaScript 타입 힌트 작성법에 대해 잘 정리된 문서

728x90
반응형