-
Notifications
You must be signed in to change notification settings - Fork 2
코딩 컨벤션
sanghee0820 edited this page Nov 15, 2024
·
1 revision
출처 : 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
- 연산자 같은 상징 ( Operator-like symbol ) 앞에서 끊기
-
원칙 : 더 높은 구문 수준 ( Higher syntactic level ) 에서 끊기
-
빈 줄 넣기 ( 세로 )
-
멤버 변수, 생성자, 이너 클래스, 초기화 사이 사이에는 항상 하나의 빈 줄을 넣는다
- 예외 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는 사용 허용
-
Method Depth은 최대 1로
- 만약 못 지킬 것 같으면 2까지라도 만들어보기
- 납득 가능한 이유를 설명하고 PR, 피어 리뷰를 활용하기
- else 키워드 지양하기
- Wrapper Class와 일급 컬랙션 사용하기 ( 보류 )
-
한 라인에 점 하나는 가독성이 좋아질 때 사용한다.
- 기본적으로 내 눈에 잘 읽히는 지를 생각해보기
- 클래스, 변수, 메서드 명을 이해 불가능할 정도로 줄여서 만들지 말기
-
setter를 사용하지 않는다.
- getter도 무지성으로 적고 시작하지 말고, 필요한지 아닌지 고려해보기
-
DTO
- Controller와 Service 계층 사이에서 정보를 전달하는 DTO 만들기
- DTO의 클래스는 recrod 클래스로 통일하기
-
Package
- 효율적 개발을 위해 도메인 별 패키지 사용하기
- 주의 : 기능 별 패키지가 아니다! ( Not Controller, Service, Domain Package )
- 효율적 개발을 위해 도메인 별 패키지 사용하기
-
Exception Handling
- 에러 코드는 Enum으로 정의해두고 추후에 공통 인터페이스, 클래스를 구현하여 처리하기
- 예제 ( ←여기에 링크 첨부하기, 상희님 코드 공유 부탁합니다 ^^ )
-
API Calling
- 외부 API 호출 시에는 Restclient를 사용하는 것으로 통일하기
추가 사항이 생기면 기록 부탁드립니다 ( 로그 쓰고 위에 추가하기 )
vite + typescript + styled component
-
들여쓰기 tab 2번
-
세미콜론 사용
-
이벤트 핸들러 함수명은 handle로 시작
function Component(props) { const handleClick = (event) => console.log(event); return <></>; }
-
컴포넌트는 파스칼케이스
-
변수, 함수, 폴더명은 카멜케이스
-
styled component 사용 - 젤 아래로 모아두기
- framer motion 사용(카드전환 등)
- 컴포넌트는 function으로 선언
- 커밋 전에 lint, format 돌리
- 절대경로 사용
- text 컴포넌트가 있으니 p, h1 등등 개별 사용 금지