Skip to content

코딩 컨벤션

주재현 edited this page Dec 12, 2023 · 1 revision

코딩 컨벤션

Git Convention

Branch

main ( 배포용 )

develop (기능 개발 )

feature-be/작업 내용

feature-aos/

ex) feature-aos/화면-UI-그리기

hotfix/ ( main 브랜치에 문제 발생 시 )

Merge

같은 분야의 팀원이 모두 확인을 했을 경우에만 머지가 가능하도록 규칙 생성.

Issue

<!-- 🔥 다음 양식으로 제목을 작성해주세요 : [task num] task 이름 -->
<!-- ex) [A-01]: 화면에 지도를 보여줄  있다. -->

## 작업 내용
<!-- ex) 화면 UI 그리기 -->
- [ ]

## 참고한 자료

## 스크린샷 (필수)

PR

<!-- 🔥 다음 양식으로 제목을 작성해주세요 : 한 일의 type(#issue number): 작업 내용 -->
<!-- ex) Feature(#133): 화면 UI 그리기 -->

## 작업 개요
<!-- 작업에 대한 설명을 간단하게 작성해주세요. -->

## 작업 사항
<!-- 작업에 대한 설명을 코드와 관련하여 남겨주세요. -->

## 고민한 점들(필수 X)
<!-- 작업을 진행하면서 고민했던 점들을 추가해주세요 -->

## 스크린샷(필수 X)
<!-- 작업을 파악하는 데 도움이 되는 스크린샷을 추가해주세요 -->

Commit message

제목

  • 50자 이내
  • 키워드는 block 처리
  • 구어체 / 문장형 x, 명령형으로 작성
  • 마침표 사용 x

내용

  • 생략가능
  • 72자 이내
  • what, why만 설명. how는 작성x
ex) [FEAT] `asd화면` 기본 레이아웃 작성

로직을 포함하지 않는 레이아웃 파일만 작성

Commit Convention

Tag Description
[FEAT] 기능개발
[DESIGN] UI 레이아웃 추가 및 수정
[FIX] 버그수정
[TEST] 테스트 코드 추가 및 수정
[SETTING] 환경 설정 추가 및 수정
[DOCS] 문서화, 주석
[REFACTOR] 리펙토링
[STYLE] 스타일

Android

Android Studio version: Iguana | 2023.2.1 Canary 12

kotlin version: 1.9.0

min SDK: 26

jvmTarget: VERSION_17

JavaVersion: VERSION_17

Layout: XML → Compose

레이아웃 리소스

  • 스네이크 케이스
  • id ex) TextView → tv_title
  • 타입명이 가장 앞에 올 수 있도록
  • 타입 명을 제외한 것들은 풀네임 사용.

스트링 리소스

  • 스네이크 케이스
  • 최대한 구체적으로 작성.
  • ex) sign_up_activity_tv_title / sign_up_acitvity_et_email_hint

데이터 바인딩

  • fragment, activity 코드 최소화를 위해 데이터바인딩, 바인딩어댑터 지향
  • 뷰모델 바인딩 변수는 vm

UI와 이벤트

  • 화면마다 화면을 담당하는 UiState를 만듭니다.
    • ui 상태 홀더 클래스 suffix - UiState
    • model과 매핑된 클래스 suffix - State
    • model mapping method name - asXXXState
  • UiState는 stateflow로 구현합니다.
  • 이벤트는 sharedflow로 구현합니다.

패키지

  • 기능 기획 이후 결정

Kotlin

변수

  • 타입 명시하기
  • 카멜 케이스
  • 명사. 데이터타입을 포함하지 않는 이름
  • ex) productList (x) products (o)
  • private val로 선언. 필요할 때 스코프 조절

함수

  • 동사
  • compose 함수를 제외, 카멜케이스
  • 함수명으로 내부 로직을 예상할 수 있도록. 최대한 서술적으로 명명.
  • depth를 최대한 줄입시다.
  • 추상화 수준을 맞춥시다.
  • 하드코딩을 지양합시다.
  • is, has → boolean
  • get → return 해야함
  • set → return 없음
  • fetch - remote
  • load - local

클래스

  • 파스칼 케이스

상수

  • upper snake case
  • 화면에 보이는 가를 기준으로 string.xml에 분리.

scope함수

  • it, this 지양

if문

  • else if 사용 금지. when으로 변환.
  • else도 지양 고려. 중괄호 무조건 쓰기.

Backend

https://radlohead.gitbook.io/typescript-deep-dive/styleguide

Ts

  • any 타입은 금지하고, 안쓰면 죽을때는 unkown 사용하기
  • type 사용할 때 이름은 PascalCase
const MOBILE_OS = {
  IOS: 'iOS',
  Android: 'Android'
} as const;
  • enum 사용 금지, const

타입 vs. 인터페이스

  • union이나 intersection이 꼭 필요할 때 type 을 사용
  • extends 또는 implements 하고 싶을 때 interface 를 사용

vscode

eslint

prettier

{
    "singleQuote": true,
    "semi": true,
    "useTabs": false,
    "trailingComma": "all",
    "printWidth": 120,
    "tabWidth": 2
}

변수 명

변수 명: camelCase ex) testTest

class 및 객체 리터럴: PascalCase

디렉토리 구조

도메인 별로 분리

src/movies/movies.conroller.ts

src/movies/entities/movies.entitiy.ts

src/movies/dto/create-movie.dto.ts

파일명

  • domain명.종류.ts
  • movies.controller.ts
  • 두 단어 이상이면 하이픈(-)으로 분리

entitles/movies.ts

controllers/movies.ts

IF 조건문

if (!hasError) {
	throw new Error();
}
  • if 문에 무조건 중괄호로 쓰기
if (a < 3) {
	return false;
}

if (hasError) {
	return false;
}

...
a += b;
return a;
  • Ealry Return으로 수행되지 않는 조건을 리턴하기

🚩SnapPoint🚩

Android 기술적 도전

Backend 기술적 도전

🤖기술 공유🤖

Android

Backend

📖회의록📖

스크럼
팀회고, 개인회고
Clone this wiki locally