forked from mingulmangul/H6-CaArt
-
Notifications
You must be signed in to change notification settings - Fork 0
코드 컨벤션
규규 edited this page Aug 6, 2023
·
3 revisions
코드 스타일
-
캠퍼스 핵데이 Java 코딩 컨벤션
-
적용법 아래 링크 참고 👇
-
디렉토리 구조
-
프로젝트 구조
- 도메인마다 폴더 구분
src ㄴdomain ㄴdomain1 ㄴcontroller ㄴservice ㄴrepository ㄴentity ㄴdto ㄴexception ㄴdomain2 ㄴ... ㄴglobal ㄴconfig ㄴexception(핸들러/공통)
-
예외 관리
- 예외 메세지는 enum으로 관리
- 도메인별 예외 클래스 생성
-
DTO
-
xxxRequestDto
&xxxResponseDto
- DTO 개수 많아지면(각각 2개) 요청/응답 폴더 구분
- 응답 형식은 일관되게
-
- 변수, 함수 : `camelCase`
- 컴포넌트 파일 : `PascalCase`
- className : `camelCase`
- interface, type : `PascalCase`
- 상수 : `UPPERCASE_SNAKE_CASE` (ex:MAX_CONTENT_INDEX)
- 리소스(폴더, 파일) : `camelCase`
- json 파일 : `lowcase_snake_case`
- 이미지 이름은 `형태_의미_상태` 순서
airbnb style guide
module.exports = {
printWidth: 80, // 한 줄 최대 문자 수
tabWidth: 2, // 들여쓰기 시, 탭 너비
useTabs: false, // 스페이스 대신 탭 사용
semi: true, // 문장 끝 세미콜론 사용
singleQuote: true, // 작은 따옴표 사용
trailingComma: 'all', // 꼬리 콤마 사용
bracketSpacing: true, // 중괄호 내에 공백 사용
arrowParens: 'avoid', // 화살표 함수 단일 인자 시, 괄호 생략
proseWrap: 'never', // 마크다운 포매팅 제외
endOfLine: 'auto', // 개행문자 유지 (혼합일 경우, 첫 줄 개행문자로 통일)
};
/src
├── /components
│ ├── /Button
│ │ └── Button.js
│ ├── /Footer
│ │ └── Footer.js
│ └── /Header
│ └── Header.js
├── index.js
├── /pages
│ ├── /HomePage
│ │ └── HomePage.js
│ └── /ProfilePage
│ └── ProfilePage.js
└── /services
└── api.js
- 기본적인 코드컨벤션은 공식문서 차용
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
구분 | 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
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 |
뷰_뷰이름_상태
btn_download_selected
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_연결되는 커스텀뷰 이름 |
- <앱이름> + Application.java
- 기능 단위로 분리
- 복수형으로 이름적기
이름 | 역할 |
---|---|
ui | Activity , Fragment 등 UI 컨트롤러 파일 모음 |
viewmodels | viewModel 파일 |
networks | 네트워크 관련 파일 |
models | 모델 파일 |
- dataClasses | | utils | 유틸리티 관련 파일 | | enumClasses | enumClass파일 |
💻 [H6-CaArt] “Done is better than perfect” 💻
- [최규현] Sentry 도입기 (feat. 로그 관리)
- [최규현] GPT3.5 모델을 활용해서 추천 문구 요약하기
- [최규현] 스프링에서 OpenAI API 성능 개선기
- [권민아] CaArt CI/CD 구축 과정
- [권민아] 채택률 계산 로직 개선 - Index tuning과 Batch processing
- [이승현] useReducer, useContext를 사용한 전역 상태 관리 with React, TS
- [이승현] 프로토타입 패턴이란?
- [이승현] UX 개선을 위한 이미지 프리로딩 With Promise
- [엄석훈] 타입스크립트 제네릭이란?
- [박세영] Android의 Data Binding: DataBindingUtil vs Binding.inflate
- [박세영] DI, Hilt 뽀개기
- [박세영] Retrofit 도입기
- [박세영] 360도 Spin Image Touble Shooting
- [김유빈] 커스텀 다이얼로그 구현