Skip to content
yeongbba edited this page Jan 14, 2021 · 10 revisions

폼생폼사 Rule


Git

Feature 브랜치 작명 규칙

feature/[Issue number]-[Task name]

ex) feature/1-init-project, feature/2-build-gradle-script-write


Fix 브랜치 작명 규칙

fix/[Issue number]-[Task name]

ex) fix/1-init-project, fix/2-build-gradle-script-write


PULL REQUEST 작성 규칙

[name]/[milestone title]/[feature branch name]

ex) 금교중/Login/feature/1-init-project


COMMIT 작성 규칙

[Issue number]-[Issue title] / [실제 작업 내용]

ex) 2-컴포넌트 UI 구현하기 / password input 생성


Github ISSUE 테스크 카드 작성 규칙

  • Title

    [TASK] 세부작업 내용
    ex) [TASK] Login Form 구현하기


  • Body

    Assignee : [이름]
    Task Category : [해당 milestone 이름]
    Task Description : [작업 상세 내용]
    Date : [작업일]
    Estimated Time : [예상 소요 시간, 단위 h]
    Consumed Time : [실제 소요 시간, 단위 h]


  • Labeling Rule
    • Branch : Feature
    • Estimated time : E : 2h
    • Consumed time : C : 1h
    • Page : Main Page (only client)
    • Controller : Sign up (only server)
    • Priority : Priority : Low | Priority : Medium | Priority : High
    • Main tech : Express | React | MySQL
    • Refactoring : Refactoring

들여쓰기 | 연산자 | 괄호

1. 들여쓰기

들여쓰기 시 1번의 탭으로 입력하기.

// 좋은 예
function test() {
    console.log('들여쓰기 테스트');
}

// 나쁜 예
function test() {
console.log('들여쓰기 테스트');
}

2. 연산자

2.1 연산자 삽입 시 공백 삽입 위치

두 개의 피연산자와 함께 사용하는 연산자는 사용 시 연산자 앞 뒤에 공백을 한 칸씩 추가하기.

(주의, 단항 연산자는 붙여서 사용)

// 좋은 예
var isSuccess = (condition <= 10);

var i;
for (i = 0; i < 10; i++) {
    work();
}

// 나쁜 예
var isSuccess = (condition<=10);

var i;
for (i=0; i<10; i++) {
    work();
}

2.2 할당 연산자

할당 연산자 사용시 할당 값이 비교 연산식이면 괄호로 감싸주기.

// 좋은 예
var isBaby = (age < 10);

// 나쁜 예
var isBaby = age < 10;

2.3 동등 연산자

동등 비교를 할 때 무조건 ==, != 대신 ===, !==를 사용하기.

// 좋은 예
console.log('1' === 1);

// 나쁜 예
console.log('1' == 1);

3. 괄호

여는 괄호 다음과, 닫는 괄호 이전에 공백 주지 않기.

// 좋은 예
var isBaby = (age <= 10);

// 좋은 예
var i;
for (i = 0; i < 10; i++) {
    work(hour, amount);
}

// 나쁜 예: 앞 뒤에 불필요한 공백 들어감
var isBaby = ( age <= 10 );

// 나쁜 예: 인자 사이에 불필요한 일 들어감
var i;
for (i = 0; i < 10; i++) {
    work( hour, amount );
}

주석 | 기본 리터럴 | 객체 리터럴

4. 주석

4.1 한 줄 주석

  • 하단의 코드를 설명하기 위해 독립된 줄에 주석 작성
  • 주석 앞의 코드를 설명하기 위해 줄 끝에 주석 작성
  • 여러 줄에 걸친 설명일 때는 사용하지 않기.
  • 독립된 줄에 한 줄 주석 작성 시에는 설명할 코드와 같은 단계 들여쓰기 사용하며, 이전 줄은 한 줄 비우기.
// 좋은 예
if (age > 20) {

    // 이 줄은 나이가 20살 이상일 때만 실행됩니다.
    showAdultMovie();
}

// 나쁜 예: 이전 줄에 공백이 없어 가독성이 떨어짐
if (age > 20) {
    // 이 줄은 나이가 20살 이상일 때만 실행됩니다.
    showAdultMovie();
}

// 나쁜 예: 주석의 들여쓰기가 설명할 주석과 단계가 다릅니다.
if (age > 20) {
    
// 이 줄은 나이가 20살 이상일 때만 실행됩니다.
    showAdultMovie();
}

// 나쁜 예: 한 줄 주석은 한 줄만 사용합시다.
// 이 코드는 만으로 나이가 20세 이상인 것이 아니고
// 그냥 20세 이상 아니아니 이게 아니고
// 아 아닙니다 만으로 나이가 20세 이상인
// 사람을 판별하기 위한 조건문입니다.
if (age > 20) {

    // 이 줄은 나이가 20살 이상일 때만 실행됩니다.
    showAdultMovie();
}

4.2 여러 줄 주석

  • 첫 번째 줄은 여러 줄 주석을 여는 방법인 /*를 삽입하며, 다른 텍스트는 넣지 않기.
  • 그 다음 줄 부터는 *와 텍스트를 입력하는데 첫 째 줄의 *과 열을 맞춘다. *과 텍스트 사이에는 공백 하나를 넣어주기.
  • 마지막 줄은 여러 줄 주석을 닫는 방법인 */를 삽입하며 다른 텍스트는 넣지 않기.
// 좋은 예
if (age > 20) {

    /*
     * 이 코드는 만으로 나이가 20세 이상인 것이 아니고
     * 그냥 20세 이상 아니아니 이게 아니고
     * 아 아닙니다 만으로 나이가 20세 이상인
     * 사람을 판별하기 위한 조건문입니다.
     */
    showAdultMovie();
}

// 나쁜 예: 이전 줄에 공백이 없어 가독성이 떨어짐
if (age > 20) {
    /*
     * 이 코드는 만으로 나이가 20세 이상인 것이 아니고
     * 그냥 20세 이상 아니아니 이게 아니고
     * 아 아닙니다 만으로 나이가 20세 이상인
     * 사람을 판별하기 위한 조건문입니다.
     */
    showAdultMovie();
}

// 나쁜 예: *과 텍스트 사이에 공백이 없음
if (age > 20) {

    /*
     *이 코드는 만으로 나이가 20세 이상인 것이 아니고
     *그냥 20세 이상 아니아니 이게 아니고
     *아 아닙니다 만으로 나이가 20세 이상인
     *사람을 판별하기 위한 조건문입니다.
     */
    showAdultMovie();
}

4.3 주석 어노테이션

어노테이션은 코드에 추가적인 설명을 더한다. 한 단어이며 그 뒤에 콜론이 붙이기.

  • TODO : 코드를 다 작성하지 않음. 다음에 작성할 내용이 반드시 기술되어 있어야 한다.
  • HACK : 어거지(임시변통)으로 해결한 코드. 핵을 왜 사용했는지 정보가 있어야하며, 더 나은 방법으로 해결할 수 있음을 뜻한다.
  • XXX : 코드에 문제가 있어 가능한 빨리 수정되야 함을 의미.
  • FIXME : 코드에 문제가 있어 수정해야하지만 XXX보다는 덜 중요하다.
  • REVIEW : 변경 가능성이 있거나 더 나은 방법이 있을 수 있음으로 리뷰가 필요한 코드를 의미.

5. 기본 리터럴

  • 문자열은 무조건 큰 따옴표로 묶습니다. 문자열을 \로 끊어 여러줄로 적지 않기.
  • 숫자는 10진수 정수, 지수표현법을 이용한 정수, 16진수 정수, 부동 소수점을 이용한 정수만 사용하며, 소수점 앞 뒤에는 숫자가 최소 하나는 있어야 한다. 8진수는 사용하지 않기.
// 좋은 예
var name = "황혁진";

// 나쁜 예
var name = '황혁진';

// 나쁜 예: 문자열이 다음으로 넘어감
var story = "옛날 옛날에 어느 마을에 어떤 집에 \
어떤 사람과 어떤 사람이 살았어요.";

// 좋은 예 
var num = 10;
var num = 10.0;
var num = 10.00;
var num = 0xB2;
var num = 3e1;

// 나쁜 예
var num = 10.;  // 소수점 뒤에 숫자 없음
var num = .1;   // 소수점 앞에 숫자 없음
var num = 010;  // 8진수 사용 안함

6. 객체 리터럴

  • 여는 중괄호는 중괄호를 여는 문장과 같은 라인에 있어야 한다.
  • 프로퍼티 - 값 쌍은 여는 중괄호 다음 줄 부터 작성하고 여는 중괄호가 있는 라인을 기준으로 한단계 들여쓰기.
  • '프로퍼티: 값' 의 형식을 지켜줍니다. 공백없이 콜론을 입력하고 공백 하나 후에 값을 입력.
  • 값이 함수라면 프로퍼티명 다음에 한줄로 입력하지 않고 함수 이전 줄, 다음 줄에 공백을 넣어주기.
  • 관련된 프로퍼티끼리 묶기 위해 프로퍼티간 공백을 넣어도 됩니다.
  • 닫는 중괄호는 텍스트와 함께 두지 않으며 끝에 세미콜론(;)을 붙여줍니다.
// 좋은 예
var person = {
    name: "송민재",
    age: 26,
    
    getName: function() {
        return this.name;
    }
};

// 나쁜 예: 함수 이전에 공백이 없음
var person = {
    name: "송민재",
    age: 26,
    getName: function() {
        return this.name;
    }
};

// 나쁜 예: 잘못된 들여쓰기
var person = {
        name: "송민재",
        age: 26,
    
        getName: function() {
            return this.name;
        }
    };

// 나쁜 예
var person = {name: "송민재", age: 26};

함수에 객체 리터럴을 전달할 때도 간단한 객체는 한 줄로 전달하고 싶겠지만, 가독성을 위해 위의 규칙을 적용하기.

// 좋은 예
getDepartment({
    name: "송민재", 
    age: 26
});

// 나쁜 예: 객체 리터럴 규칙을 지키지 않음
getDepartment({name: "송민재", age: 26});

객체 프로퍼티 작성 규칙은 8.2 변수명 생성 규칙과 같음. 객체 메서드는 9.2 함수명 규칙을 따름. 프로퍼티나 메서드가 private라면 _를 맨 앞에 붙여 private라고 명시적으로 알려주기.

var person = {
    _homeAddress: "인천",

    name: "황혁진",
    age: 26,

    _getHomeAdrress: function() {
        return this._homeAddress;
    }
}

변수 | 함수 | 문장 규칙

7. 변수 선언

7.1 변수 선언 방법

  • 변수 연산자는 반드시 사용 전에 선언되어야 한다. 한 개의 var을 이용해 함수의 맨 윗줄에 선언하며, 대입 연산자는 같은 단계의 들여쓰기를 사용하기.
  • 마지막 변수 선언 전까지는 ,로 구분을 해주며 마지막 변수에는 세미콜론(;)을 붙여주기. 초기화된 변수는 반드시 초기화 되지 않은 변수보다 앞에 위치 시키기.
// 좋은 예
var name    = "권현아",
    age     = 23,
    home    = "방화동";

// 나쁜 예: 대입연산자의 들여쓰기가 맞지 않음
var name = "권현아",
    age = 23,
    home = "서울과 인천의 경계";

// 나쁜 예: 들여쓰기가 맞지 않음
var name    = "권현아",
age     = 23,
home    = "서울과 인천의 경계";

// 나쁜 예: 한 줄에 여러 변수 선언
var name = "권현아", age = 23, home = "서울과 인천의 경계";

// 나쁜 예: 초기화 되지 않은 변수가 먼저 위치함
var name,
    age     = 23,
    home    = "서울과 인천의 경계";

7.2 변수명 규칙

  • 변수명은 낙타표기법을 사용한다. $나 \는 사용하지 않으며 _도 사용을 자제하기.
  • 변수명은 소문자로 시작하며 새로운 단어의 첫 번째 문자는 대문자를 사용.
  • 변수명의 첫 단어는 반드시 명사를 사용해주어 함수와 구분하기 쉽도록 하기.
// 좋은 예
var firstName = "혁진";

// 나쁜 예: 대문자로 시작
var FirstName = "혁진";

// 나쁜 예: 빈칸 들어감
var first_name = "혁진";

// 나쁜 예: 동사로 시작
var getFirstName = "혁진";

변수를 값이 변하지 않는 상수로 사용하려면 이름의 모든 문자를 대문자로 사용하며 단어 사이에 밑줄( _ )을 넣어주기.

var TOTAL_COUNT      = 1,
    TOTAL_POPULATION = 1000;

8. 함수 선언

8.1 함수 선언 방법

  • 객체에 선언된 메서드가 아니라면 반드시 함수 선언 형식을 사용하기.
  • 함수 표현식, new를 이용한 생성자 형식을 사용하지 않기. (객체 생성 시 사용)
  • 함수명과 여는 괄호 '(' 사이에는 공백 넣지 않는다. '(' 와 ')' 사이에는 공백 하나를 넣어주기.
  • 인자 입력시 , 뒤에 공백을 넣기.
  • 함수 본문은 한 단계 들여쓰기를 사용.
// 좋은 예
function working(arg1, arg2) {
    return money;
}

// 나쁜 예: 함수 명과 괄호 사이에 공백
function working (arg1, arg2) {
    return money;
}

// 나쁜 예: 함수 표현식 사용
var working = function(arg1, arg2) {
    return money;
}

// 나쁜 예: 생성자 방식 사용
var money = new Function("arg1", "arg2");

익명 함수는 객체에 메서드 할당 시나, 다른 함수에 인자로 전달할 때 사용합니다.

person.name = function() {
    // 코드
};

getName(function() {
    // 코드
});

8.2 함수명 규칙

함수명 역시 낙타표기법을 사용하기. 첫 번째 단어는 동사를 사용하여 변수명과 구분해주기.

// 좋은 예
function getName() {
    
};

// 나쁜 예: 대문자로 시작
function GetName() {

};

// 나쁜 예: 명사 사용
function name() {

};

// 나쁜 예: _ 사용
function get_name() {

};

생성자 함수는 new를 통해 생성할 때 실행되는 함수며 객체 인스턴스를 생성할 때 사용하므로 동사로 시작하지 않고, 첫 문자를 대문자로 시작.

// 좋은 예
function Enemy() {

};

// 나쁜 예: 소문자로 시작
function enemy() {

};

9. 문장 규칙

9.1 return문

반환하는 값의 명확한 의미를 알기 위해 괄호를 사용하지 않기.

// 좋은 예
var generation = (age <= 7 ? "baby" : "teenager");
return generation;

// 나쁜 예
return (age <= 7 ? "baby" : "teenager");

9.2 if 문

한 문장이라도 중괄호를 포함. (다음에 문장을 추가할 때 중괄호를 빼먹는 실수하지 않도록)

// 좋은 예
if (person != null) {
    work();
}

// 나쁜 예
if (person != null)
    work();

9.3 switch 문

  • case는 switch를 기준으로 한단계 들여쓰기.
  • 첫 번째 case를 제외한 case와 default 사이에는 한 줄의 공백이 있어야 함.
  • default를 제외한 case는 return, break, throw 중 하나로 마쳐야 하고 다음 case로 의도적으로 넘기는 부분은 주석처리를 해주기.
  • default를 의도적으로 생략했으면 주석처리 해주기.
// 좋은 예
switch (num) {
    case 0:
        break;
        
    case 1:
        break;
        
    default:
        break;
}

// 좋은 예
switch (num) {
    case 0:
        // 다음 case와 같은 동작 처리

    case 1:
        break;

    default:
        break;
}

// 좋은 예
switch (num) {
    case 0:
        break;

    case 1:
        break;

    // default 구문 생략
}