Skip to content

코딩 컨벤션

sanghee0820 edited this page Nov 15, 2024 · 1 revision

Backend Coding Convention

Google Java Convention

출처 : https://sihyung92.oopy.io/af26a1f6-b327-45a6-a72b-c6fcb754e219

  • 소스파일 작성

    • 구조

      // 라이센스 또는 저작권 정보 ( 필수 x )
      // package 정보
      ...
      // import 정보
      ...
      // 최상위 클래스 시작
    • 규칙

      • 위 구조의 각 요소들은 한 줄의 빈 공백으로 구분 되어야 한다
        • 단, Import 시에 Static과 Non-Static은 구분할 것
      • Package와 Import 문의 경우, 아무리 길어도 한 줄에 적어야 한다 ( 개행 x )
      • Import 시에 에스터리스크 ( * ) 등을 사용하여 하위 전체 클래스를 가져오지 않는다
  • 클래스

    • 한 소스파일에 최상위 클래스는 하나로 유지해야 한다
    • 비슷한 역할을 하는 필드나 메서드끼리 뭉쳐놓는 것이 좋다
      • 참고 : Overriding 한 메서드는 흩어져 있으면 안된다
  • 중괄호

    • 여는 중괄호 ( ‘}’ ) 의 경우 : 에서는 개행하지 않고, 에서는 개행한다
    • 닫는 중괄호 ( ‘}’ ) 의 경우 : 에서는 개행하고, 에서는 경우에 따라 개행한다
      • 뒤에서 개행하는 경우 : 중괄호가 끝나거나, 생성자, 메서드, 클래스가 끝날 때
  • 빈 블록

    • 개행을 해도 되고 안해도 된다, 단 멀티 블록 ( if…else, try…catch ) 의 경우에는 필수적으로 개행해야 한다
  • 들여쓰기

    • depth 1 == tab 1 ( 공백 4칸을 들여쓰기 깊이 1로 하기 )
  • 열 제한 ( 한 줄에 쓸 수 있는 텍스트 제한 )

    • 기본적으로 최대 100자로 제한한다
    • 예외 ( 한 줄에 100자 이상 쓸 수 있는 경우 )
      • 열 제한을 따를 수 없는 경우 : Javadoc의 Url, JSNI 메서드
      • Package와 Import 명세
      • Shell에 사용하기 위해 주석으로 표시해둔 Command Line 문구들
    • 추천 : 메서드나 지역변수 선언을 통해 줄바꿈 없이 열 제한을 해결하자!
  • 줄바꿈 규칙

    • 원칙 : 더 높은 구문 수준 ( Higher syntactic level ) 에서 끊기
      • 연산자 같은 상징 ( Operator-like symbol ) 앞에서 끊기
        • ex : 람다의 ‘::’, 제네릭 상속 구문에서의 ‘&’ 등이 해당
        • 원래는 ‘.’ 도 포함이지만, 가독성을 해치지 않는 경우 무조건 줄바꿈 넣지는 않기로 했으니 포함 x
  • 빈 줄 넣기 ( 세로 )

    • 멤버 변수, 생성자, 이너 클래스, 초기화 사이 사이에는 항상 하나의 빈 줄을 넣는다
      • 예외 1. 두 개의 연속된 필드 사이의 빈 줄은 옵션, 필드 간의 논리적 그룹을 형성하는 등의 활용이 가능하다
      • 예외 2. 열거형 상수 사이의 빈 줄은 허용된다
  • 빈 칸 넣기 ( 가로 )

    • if, for, catch와 괄호 사이의 공백
    • 중괄호 앞의 공백
    • 이항, 삼항 연산자의 앞 뒤, 연산자 같은 상징
    • 타입 선언과 변수명 사이
    • 배열 안 쪽은 취향대로
  • 세로 정렬은 사용하지 않기

    private int x; // this is fine
    private Color color; // this too
    
    private int   x;      // permitted, but future edits
    private Color color;  // may leave it unaligned
  • 변수 선언

    • for 문 헤더를 제외한 지역에서는 한 번에 하나의 변수만 선언한다
    • 변수를 사용하는 지점에서 가장 가까운 지점에서 선언한다
      • Coverage 개념과 연관
  • 배열

    • 배열의 선언은 Block-liked 한 방법이면 어떤 방법을 사용해도 무관하다
    • C-style로 배열을 선언하지 않는다
      • String args[] ( x ) → String[] args ( o )
  • 스위치문

    • 통과하는 경우에는 주석을 달아두어야 한다
    • default 코드가 없어도 default 블록을 추가해야 한다
  • 어노테이션

    • 기본은 각 1줄로 처리한다
    • 단, 인자없는 한 줄의 어노테이션은 메서드와 한 줄에 표기할 수 있다
    • 또한, 필드 변수의 경우에는 인자 없는 여러 줄의 어노테이션을 한 줄에 표기할 수 있다
  • 블록 주석

    /*
     * This is          // And so           /* Or you can
     * okay.            // is this.          * even do this. */
     */
  • Long

    • Long 타입 변수의 값은 접미사로 l이 아닌 L을 사용한다 ( l은 1과 혼동 가능 )
  • 네이밍

    • 클래스 이름은 UpperCamelCase
    • 메서드와 필드 변수 이름, 매개변수, 지역변수 이름은 lowerCammelCase
    • 상수 이름은 CONSTANT_CASE

객체 지향 생활 체조

3 → 1급 컬렉션 사용 미결정

4 → 무조건은 아니고, 가독성이 좋을 때만 사용하기

6 → Getter는 사용 허용

  1. Method Depth은 최대 1
    • 만약 못 지킬 것 같으면 2까지라도 만들어보기
    • 납득 가능한 이유를 설명하고 PR, 피어 리뷰를 활용하기
  2. else 키워드 지양하기
  3. Wrapper Class와 일급 컬랙션 사용하기 ( 보류 )
  4. 한 라인에 점 하나는 가독성이 좋아질 때 사용한다.
    • 기본적으로 내 눈에 잘 읽히는 지를 생각해보기
  5. 클래스, 변수, 메서드 명을 이해 불가능할 정도로 줄여서 만들지 말기
  6. setter를 사용하지 않는다.
    • getter도 무지성으로 적고 시작하지 말고, 필요한지 아닌지 고려해보기

기타 ( 그라운드 코딩 컨벤션 )

  • DTO
    • Controller와 Service 계층 사이에서 정보를 전달하는 DTO 만들기
    • DTO의 클래스는 recrod 클래스로 통일하기
  • Package
    • 효율적 개발을 위해 도메인 별 패키지 사용하기
      • 주의 : 기능 별 패키지가 아니다! ( Not Controller, Service, Domain Package )
  • Exception Handling
    • 에러 코드는 Enum으로 정의해두고 추후에 공통 인터페이스, 클래스를 구현하여 처리하기
    • 예제 ( ←여기에 링크 첨부하기, 상희님 코드 공유 부탁합니다 ^^ )
  • API Calling
    • 외부 API 호출 시에는 Restclient를 사용하는 것으로 통일하기

추가사항

추가 사항이 생기면 기록 부탁드립니다 ( 로그 쓰고 위에 추가하기 )


Frontend Coding Convention

vite + typescript + styled component

  1. 들여쓰기 tab 2번

  2. 세미콜론 사용

  3. 이벤트 핸들러 함수명은 handle로 시작

    function Component(props) {
      const handleClick = (event) => console.log(event);
    
      return <></>;
    }
  4. 컴포넌트는 파스칼케이스

  5. 변수, 함수, 폴더명은 카멜케이스

  6. styled component 사용 - 젤 아래로 모아두기

  • framer motion 사용(카드전환 등)
  1. 컴포넌트는 function으로 선언
  2. 커밋 전에 lint, format 돌리
  3. 절대경로 사용
  4. text 컴포넌트가 있으니 p, h1 등등 개별 사용 금지