Skip to content

코드 컨벤션

규규 edited this page Aug 6, 2023 · 3 revisions

[BE]

코드 스타일

디렉토리 구조

  • 프로젝트 구조

    • 도메인마다 폴더 구분
    src
    ㄴdomain
      ㄴdomain1
        ㄴcontroller
        ㄴservice
        ㄴrepository
        ㄴentity
        ㄴdto
        ㄴexception
      ㄴdomain2
      ㄴ...
    ㄴglobal
      ㄴconfig
      ㄴexception(핸들러/공통)
  • 예외 관리

    • 예외 메세지는 enum으로 관리
    • 도메인별 예외 클래스 생성
  • DTO

    • xxxRequestDto & xxxResponseDto
    • DTO 개수 많아지면(각각 2개) 요청/응답 폴더 구분
    • 응답 형식은 일관되게





[FE]

Naming Rule

- 변수, 함수 : `camelCase`
- 컴포넌트 파일 : `PascalCase`
- className : `camelCase`
- interface, type : `PascalCase`
- 상수 : `UPPERCASE_SNAKE_CASE` (ex:MAX_CONTENT_INDEX)
- 리소스(폴더, 파일) : `camelCase`
- json 파일 : `lowcase_snake_case`
- 이미지 이름은 `형태_의미_상태` 순서

ESLint Setting

airbnb style guide

Prettier Setting

module.exports = {
  printWidth: 80, // 한 줄 최대 문자 수
  tabWidth: 2, // 들여쓰기 시, 탭 너비
  useTabs: false, // 스페이스 대신 탭 사용
  semi: true, // 문장 끝 세미콜론 사용
  singleQuote: true, // 작은 따옴표 사용
  trailingComma: 'all', // 꼬리 콤마 사용
  bracketSpacing: true, // 중괄호 내에 공백 사용
  arrowParens: 'avoid', // 화살표 함수 단일 인자 시, 괄호 생략
  proseWrap: 'never', // 마크다운 포매팅 제외
  endOfLine: 'auto', // 개행문자 유지 (혼합일 경우, 첫 줄 개행문자로 통일)
};

Project Directory Structure

/src
├── /components
│   ├── /Button
│   │   └── Button.js
│   ├── /Footer
│   │   └── Footer.js
│   └── /Header
│       └── Header.js
├── index.js
├── /pages
│   ├── /HomePage
│   │   └── HomePage.js
│   └── /ProfilePage
│       └── ProfilePage.js
└── /services
    └── api.js





[AND]

Android

  • 기본적인 코드컨벤션은 공식문서 차용

Kotlin 스타일 가이드  |  Android Developers

Android에서 일반적인 Kotlin 패턴 사용  |  Android Developers

함수 네이밍 컨벤션

  • 동사로 시작, 이름=주석
  • 매개변수 이름 줄이지 않기 ( 줄이면 위키 컨벤션에 명시)
  • 함수는 동작 하나만 담당
show... : 무언가를 보여주는 함수.  ex) showSlide()
get... : 값을 반환하는 함수.  ex) getName()
calc... : 값을 반환하는 함수. ex) calcSum()
create... : 무언가를 생성하는 함수. ex) createSlide()
is... : 무언가를 확인하고 불린값을 반환하는 함수. ex) isPermission()
convert... : 무언가를 전환해주는 함수. ex) convertToSlide()
add... : 추가하는 함수.
remove... : 지우는 함수.
get -> 직접 접근
set -> backingProperty설정

클래스 네이밍 컨벤션

→ 키워드 명사Activity, 명사Fragment

Prefix 컨벤션
activity 명사Acitivity
fragment 명사Fragment
view 명사View
추상클래스 상속 명사+부모클래스
데이터클래스 명사로 끝내기
뷰모델 연결되는화면키워드+ViewModel
util 명사+Utils

리소스 네이밍 컨벤션

Prefix Usage
activity contentview for activity
fragment view for a fragment
view inflated by a custom view
item layout used in list/recycler/gridview
layout layout reused using the include tag

Android 리소스 정리시 사용하는 Naming Convention

1. ID컨벤션

구분 Prefix
Button btn_ btn_download
ImageView iv_ iv_profile
RecyclerView rv_ rv_car_options
LinearLayout ll_ ll_profile_root
TextView tv_ tv_user_name
PlainText pt_ pt_user_name_input
CardView cv_ cv_life_cycle_result
  • 뷰타입_뷰역할(명사 ~ 뷰그룹일때는 복수형으로 사용)
  • 최상단뷰는 root

2. Drawable Naming

drawable에 들어가는 이미지 파일들의 prefix에는 아래와 같은 타입들을 사용해 주는데요.

가능하다면, "이미지구분_무엇_어디에서" 순서로 정해서 사용하는 것이 좋습니다.

구분 Prefix
Button btn_ btn_download
Icon ic_ ic_like_feed_48
Launcher Icon ic_launcher ic_launcher_myapp
Menu menu_ menu_more
CheckBox cb_ cb_alarm
Tab ic_tab ic_tab_something

3. Button Selector

뷰_뷰이름_상태

btn_download_selected

4. Layout

Acitivity나 Fragment 등의 레이아웃에 대해서는 다음과 같이 구분해서 붙여주면 됩니다.

구분
Activity activity_main
Fragment fragment_favorite
Dialog dialog_login
ImageView iv_profile
List Item View item_bus
Checkbox cb_option
LinearLayout linearLayout
ProgressBar pb
CustomView custom_연결되는 커스텀뷰 이름

5. Applicatoin Class

  • <앱이름> + Application.java

6. 디렉토리 설계

  • 기능 단위로 분리
  • 복수형으로 이름적기
이름 역할
ui Activity , Fragment 등 UI 컨트롤러 파일 모음
viewmodels viewModel 파일
networks 네트워크 관련 파일
models 모델 파일
  • dataClasses | | utils | 유틸리티 관련 파일 | | enumClasses | enumClass파일 |
Clone this wiki locally