자바스크립트 네이밍 컨벤션

이일우·2023년 2월 20일

공부하기

목록 보기
7/42

코딩 컨벤션과 네이밍 컨벤션에 관해서는 몇번 들어봤지만, 자세하게 생각하지않고 규칙을 내맘대로 쓰는 경우도 많았다. 어차피 이름에 관한 내용이고, 프로그램만 잘 돌아가면 되지않냐 라는 생각도 있었다. 그러나 이번에 팀 프로젝트를 준비하면서 네이밍 컨벤션이 얼마나 중요하고 또, 작업을 효율적으로 만들어주는지에 대해 알게되어 자바스크립트 네이밍 컨벤션에 대해 적어보려 한다.

이 블로그 글은 airbnb 네이밍 컨벤션을 참조하였습니다
airbnb 자바스크립트 네이밍 컨벤션
airbnb 자바스크립트 네이밍 컨벤션 한글 번역

  1. 한 문자로 된 이름은 피하고, 이름에서 의도를 알 수 있게 지어주세요.
// bad
function q() {
  // ...
}

// good
function query() {
  // ...
}
  1. 객체, 함수, 인스턴스에는 카멜케이스(camelCase)를 사용하세요.
// bad
const OBJEcttsssss = {};
const this_is_my_object = {};
function c() {}

// good
const thisIsMyObject = {};
function thisIsMyFunction() {}
  1. 클래스나 생성자에는 파스칼케이스(PascalCase)를 사용하세요.
// bad
class user {
  constructor(options) {
    this.name = options.name;
  }
}

const bad = new user({
  name: 'nope',
});

// good
class User {
  constructor(options) {
    this.name = options.name;
  }
}

const good = new User({
  name: 'yup',
});
  1. 언더스코어를 사용하지 마세요.

    자바스크립트는 속성이나 메소드 측면에서 은닉된 정보라는 개념을 가지고 있지 않습니다. 언더스코어는 일반적으로 “private”을 의미하지만, 사실 자바스크립트에서 해당 속성은 완전히 public하며, 이는 공공 API의 일부입니다. 이 관례는 개발자들로 하여금 변화가 깨지지 않는 것으로 간주하거나 테스트가 필요하지 않다고 잘못 생각하게 만듭니다. 요약: 만약 뭔가를 “private”하게 사용하고 싶다면, 그것은 있을 수 없는 일입니다.

// bad
this.__firstName__ = 'Panda';
this.firstName_ = 'Panda';
this._firstName = 'Panda';

// good
this.firstName = 'Panda';
  1. 참조를 this에 저장하지 마세요. 화살표 함수를 사용하세요.
// bad
function foo() {
  const self = this;
  return function () {
    console.log(self);
  };
}

// good
function foo() {
  return () => {
    console.log(this);
  };
}
  1. 파일 이름은 default export의 이름과 일치해야 합니다.
    6-1. 함수를 export-default할 때 캐멀케이스(camelCase)를 사용하세요. 파일 이름은 함수 이름과 같아야 합니다.
    6-2. 생성자 / 클래스 / 싱글톤 / 함수 라이브러리 / 단순 객체를 export할 때 파스칼케이스(PascalCase)를 사용하세요.
// 파일 1 내용
class CheckBox {
  // ...
}
export default CheckBox;

// 파일 2 내용
export default function fortyTwo() { return 42; }

// 파일 3 내용
export default function insideDirectory() {}

// bad
import CheckBox from './checkBox'; // PascalCase import/export, camelCase filename
import FortyTwo from './FortyTwo'; // PascalCase import/filename, camelCase export
import InsideDirectory from './InsideDirectory'; // PascalCase import/filename, camelCase export

// good
import CheckBox from './CheckBox'; // PascalCase export/import/filename
import fortyTwo from './fortyTwo'; // camelCase export/import/filename
import insideDirectory from './insideDirectory'; // camelCase export/import/directory name/implicit "index"
  1. 약자나 이니셜은 모두 대문자이거나 모두 소문자이어야 합니다.
// bad
const HttpRequests = [
  // ...
];

// good
import SMSContainer from './containers/SMSContainer';

// good
const HTTPRequests = [
  // ...
];

// also good
const httpRequests = [
  // ...
];

// best
import TextMessageContainer from './containers/TextMessageContainer';

// best
const requests = [
  // ...
];
  1. 상수 이름을 대문자로 짓는 것은 해당 상수가 (1) 내보내기 될 때, (2) const 타입일 때 (값이 재할당되지 못할 때), (3) 그 상수와 상수가 중첩된 속성이 절대 변하지 않는다는 것을 신뢰할 수 있을 때만 하세요.

    이것은 변수가 영원히 변하지 않는다는 것을 확신할 수 없을 때 도움을 주기 위한 추가적인 도구입니다. 대문자 변수는 변수와 변수의 속성이 변하지 않는다는 것을 프로그래머에게 알려줍니다.

// bad
const PRIVATE_VARIABLE = 'should not be unnecessarily uppercased within a file';

// bad
export const THING_TO_BE_CHANGED = 'should obviously not be uppercased';

// bad
export let REASSIGNABLE_VARIABLE = 'do not use let with uppercase variables';

// ---

// allowed but does not supply semantic value
export const apiKey = 'SOMEKEY';

// better in most cases
export const API_KEY = 'SOMEKEY';

// ---

// bad - unnecessarily uppercases key while adding no semantic value
export const MAPPING = {
  KEY: 'value'
};

// good
export const MAPPING = {
  key: 'value'
};

0개의 댓글