-
Notifications
You must be signed in to change notification settings - Fork 6
코딩 컨벤션
yoonwoo123 edited this page Nov 24, 2020
·
4 revisions
- 명명규칙
- 파일명
- 네이밍
- 식별자 유형별 규칙
- 들여쓰기
- 문장의 종료
- 전역 변수
- 선언과 할당
- 변수
- 배열과 객체
- 함수
- 화살표 함수
- Promise Executor 함수
- Destructuring
- 템플릿 문자열
- 클래스와 생성자
- 모듈
- 블록 구문
- 조건 확인하기
- 반환하기
- 순회하기
- 콜백 함수의 스코프
- 주석
- 공백
버전 | 일자 | 이력사항 | 작성자 |
---|---|---|---|
v1.0 | 2020-11-16 | 초안 작성 | 김민섭, 박재윤, 윤영우, 최홍일 |
- 본 문서는 TOAST 코딩 컨벤션과 Google 코딩 컨벤션을 참조하여 작성하였다.
-
기본: lowercase(전부 소문자)
-
단어가 섞일 경우: dash(-)
-
ex) issue tracker인 경우
issue-tracker
-
-
파일별 기능 구분 시: dot(.)
-
ex) issue-tracker의 컨트롤러, 서비스 등을 표현할 경우
issue-tracker.controller issue-tracker.service
-
-
리액트 컴포넌트 파일 및 폴더:
UpperCamelCase
- 의미가 없거나 약어가 모호한 것은 쓰지 말자. ex) err, pc는 x
- (지역 변수 or private 변수)명은 '_'로 시작한다.
- URL, HTML 같은 범용적인 대문자 약어는 대문자 그대로 사용한다.
- Pacakage names :
lowerCamelCase
- Method names :
lowerCamelCase
- Class names :
UpperCamelCase
- Enum names :
UpperCamelCase
Enum 은열거형
으로 클래스와 유사하게 작성된다. - Constant names ( 상수 ) :
CONSTANT_CASE
- space 2번으로 들여쓰기를 한다.
- 한 줄에 하나의 문장만 허용하며, 문장 종료 시에는 반드시 세미콜론(;)을 사용한다.
- 암묵적 전역 변수를 사용하지 않는다. (최대한 지양하자)
- 값이 변하지 않는 변수는 const를, 값이 변하는 변수는 let을 사용하여 선언한다. var는 절대로 사용하지 않도록 한다.
- const를 let 보다 위에 선언한다.
- const와 let은 사용 시점에 선언 및 할당을 한다.
- 외부 모듈과 내부 모듈을 구분하여 사용한다.
const lodash = require('lodash');
const $ = require(jquery);
const handlebars = require('handlebars');
const d3 = require('d3');
const pluginFactory from '../../factories/pluginFactory';
const predicate from '../../helpers/predicate';
const raphaelRenderUtil from '../../plugins/raphaelRenderUtil';
- 자기 참조 할당은 하지 않는다.
// 참고 ESLint - no-self-assign
// Bad
foo = foo;
[a, b] = [a, b];
[a, ...b] = [x, ...b];
({a, b} = {a, x});
// Good
foo = bar;
let foo = foo;
[foo = 1] = [foo];
- 배열과 객체는 반드시 리터럴로 선언한다.
// Bad
const emptyArr = new Array();
const arr = new Array(1, 2, 3, 4, 5);
// Bad - 객체 생성자 사용
const emptyObj = new Object();
const obj = new Object();
// Good
const emptyArr = [];
const arr = [1, 2, 3, 4, 5];
// Good
const emptyObj = {};
const obj = {
pro1: 'val1',
pro2: 'val2'
};
- 배열 복사 시 순환문을 사용하지 않는다.
const len = items.length;
let i;
// Bad
for (i = 0; i < len; i++) {
itemsCopy[i] = items[i];
}
// Good
const itemsCopy = [...items];
- 배열의 요소중 하나라도 줄 바꿈이 있다면 배열 안의 요소는 일관되게 모두 줄 바꿈을 해주어야 한다.
- 객체의 프로퍼티가 1개인 경우에만 한 줄 정의를 허용하며, 2개 이상일 경우에는 개행을 강제한다.
- 객체 리터럴 정의 시 콜론 앞은 공백을 허용하지 않으며 콜론 뒤는 항상 공백을 강제한다.
- 객체의 메서드 표현 시 축약 메소드 표기를 사용한다.
// Bad
const atom = {
value: 1,
addValue: function(value) {
return atom.value + value;
}
};
// Good
const atom = {
value: 1,
addValue(value) {
return atom.value + value;
}
};
- 메서드 문법 사용 시 메서드 사이에 개행을 추가한다.
- 함수 생성자를 사용하여 선언하지 않고, 함수는 함수 표현식으로 선언한다.
- 함수는 사용 전에 선언해야 하며, 함수 선언문은 변수 선언문 다음에 오도록 한다.
- arrow function의 매개변수는 1개여도 괄호를 사용한다.
- 함수 표현식 대신 화살표 함수를 사용한다.
- 암시적 반환을 최대한 활용한다.
- 암시적 반환을 사용할 경우 함수 본문 전에 개행을 하지 않는다.
- Promise Executor 함수에 async 함수를 사용하지 않는다.
- 오브젝트의 프로퍼티에 접근할 때는 Destructuring을 이용한다.
- 변수 등을 조합해서 문자열을 생성하는 경우 템플릿 문자열(백틱)을 이용한다.
- class와 extends를 이용해서 객체 생성 및 상속을 구현한다.
- 필요한 생성자는 우선적으로 선언해둔다. (초기 값이 없는경우
undefined
로 선언한다.)
- FE 개발에서는 항상 import와 export를 이용한다. (require는 사용하지 않는다.)
- wildcard import는 사용하지 않는다.
- import문으로부터 직접 export하지 않는다.
- 한 줄짜리 블록일 경우라도 {}를 생략하지 않으며 명확히 줄 바꿈 하여 사용한다.
- 키워드와 조건문 사이에 빈칸을 사용한다.
- do-while문 사용 시 while문 끝에 세미콜론을 쓴다.
- switch-case 사용 시 첫 번째 case문을 제외하고 case문 사용 이전에 개행한다.
- switch-case 사용 시 각 구문은 break, return, throw 중 한 개로 끝나야 하며 default문이 없으면 // no default 표시를 해준다.
- 삼중 등호 연산자인 ===, !==만 사용한다.
- 함수 내에서 반환은 한 번만 한다. 특정 값을 반환해야 하는 경우, 함수 맨 마지막에서 한 번만 반환한다. 단, 예외로 빠져나가는 경우는 제외한다. 코드를 예측하기 쉬우며 흐름이 간결한 함수를 작성할 수 있다.
- return문 바로 위는 한 칸 비워 놓는다.
// Bad
function getResult() {
...
if (condition) {
...
return someDataInTrue;
}
...
return someDataInFalse;
}
// Allow
function foo(isValid) {
...
// 예외처리로 바로 빠져나감
if (!isValid) {
return;
}
...
return someDataInTrue;
}
// Good
function getResult() {
let resultData;
...
if (condition) {
...
resultData = someDataInTrue;
} else {
...
resultData = someDataInFalse;
}
return resultData;
}
- 반복문 사용은 일반화된 순회 메서드 사용을 권장한다.
- 반목문은 상황에 맞는 것을 선택한다. (for문, forEach 등)
- 반복을 위한 변수는 반복문에 선언한다.
- 콜백 등 익명 함수를 사용하는 경우, 최대한 클로저 사용을 피하고 각 스코프에 알맞게 변수를 선언한다.
- 코드와 관련된 주석은 달지 않는다. 코드를 통해 최대한 내용을 표현하는 것에 집중한다.
- 단, 경고를 위한 주석이나 코드의 출처를 남기는 주석은 제외한다.
- TODO 주석은 작성이 가능하나 아래의 양식을 꼭 지켜야함.
- // TODO: 내용
- 개발이 완료되면 바로 지운다.
- 키워드, 연산자와 다른 코드 사이에 공백이 있어야 한다.
- 시작 괄호 바로 다음과 끝 괄호 바로 이전에 공백이 있으면 안 된다.
- 콤마 다음에 값이 올 경우 공백이 있어야 한다.