/ZEPETO-iOS

ZEPETO… ZEPETO… 세계ZEPE…TO…

Primary LanguageSwift

Desktop - 2

💻 Coding Convention

🖋네이밍

Class & Struct

  • 클래스/구조체 이름은 UpperCamelCase를 사용합니다.

함수, 변수, 상수

  • 함수와 변수에는 lowerCamelCase를 사용합니다.

  • 버튼명에는 Btn 약자를 사용합니다.

  • 모든 IBOutlet에는 해당 클래스명을 뒤에 붙입니다.

    예외 Image는 항상 Img로 줄여서 네이밍합니다.

    @IBOutlet weak var settingImgView: UIImageView!
  • 기본 클래스 파일을 생성하거나 컴포넌트를 생성할 때는 약어 규칙에 따라 네이밍합니다.

    • 예시

      TV TVC CV CVC VC NVC TBC

      TableView -> TV
      TableViewCell -> TVC
      CollectionView -> CV
      CollectionView Cell -> CVC
      ViewController -> VC
      NavigationController -> NVC
      TabbarController -> TBC

    좋은 예

    @IBOutlet weak var createBtn: UIButton!
    @IBOutlet weak var categoryLabel: UILabel!
    @IBOutlet weak var mainPostTV: UITableView!

    나쁜 예

    @IBOutlet weak var ScrollView: UIScrollView!
    @IBOutlet weak var categoryCollectionView: UICollectionView!
    @IBOutlet weak var tagCollectionView: UICollectionView!
    @IBOutlet weak var tableview: UITableView!

함수 네이밍

  • set → setDelegate (기능관련 함수)
  • config → configUI (UI관련 함수)
  • IBActiontapDismissBtn() : 단순 클릭, presentResultVC() : 화면전환 메소드(push, present, pop, dismiss)

🏷주석

MARK 주석


// MARK: IBOutlet

// MARK: Properties

// MARK: IBAction

// MARK: Life Cycle

// MARK: - UI

// MARK: - Custom Methods

// MARK: - 프로토콜들 하나씩 채택해서 Extension 으로 빼기 (TV, CV, .., Custom Delegate 모두)

/// ~ 하는 메서드 (함수는 항상 문서화)

// TODO: 앞으로 할 일을 TODO로 적어두기
 

⭕️공백
  • 탭 사이즈는 4로 사용합니다.

  • 한 줄의 최대 길이는 80자로 제한합니다.

  • 최대 tab depth 제한

    • tab의 최대 depth는 4로 제한합니다.
    • 이 이상으로 depth가 길어지면 함수를 통해 나눌 수 있도록 합니다.
    • 그 이상으로 개선할 수 없다고 판단되는 경우, 팀원들과의 코드리뷰를 통해 개선합니다.
  • 괄호 사용

    • (if, while, for)문 괄호 뒤에 한칸을 띄우고 사용합니다.
       if (left == true) {
         // logic
       }
  • 띄어쓰기

    let a = 5; // 양쪽 사이로 띄어쓰기 하기
    if (a == 3) {
      // logic
    }

🎸기타규칙
  • 외부에서 사용되지 않을 변수나 함수는 private으로 선언합니다.

  • viewDidLoad() 와 같은 생명주기 함수들에는 function만 위치시킵니다.

  • 불필요한 self는 지양합니다. 예외 클로저를 사용할 때는 자체 함수에 self를 붙여줍니다.

  • Extension 을 사용해 기능 단위로 코드를 더 가독성있게 구분합니다.

    <기본 클래스에 배치되는 것>

    • IBOutlet, Properties, LifeCycle, IBAction

    <Extension 배치 순서>

    1. UI
    2. custom Methods
    3. delegate (extension으로 빼는 프로토콜들 자유롭게)
    4. 노티, 키보드 등등 
    5. Network
    


🗂 Foldering Convention

🍎 ZEPETO-iOS Foldering Convention 🍎
 ZEPETO-iOS
    ├──📁 Global
    │   ├── LaunchScreen.storyboard
    │   ├── PublicData
    │   ├── Factory
    │   ├── Class 
    │   ├── Struct
    │   ├── Protocol
    │   └── Extension
    │   
    ├──📁 Network
    │   ├── Bases
    │   ├── APIEssentials
    │   ├── Services
    │   ├── APIModels
    │   ├── APIManagers
    │   └── EventLogger.swift
    │
    ├──📁 Screen
    │   └── CreateMain
    │       ├── SB
    │       ├── VC
    │       └── Cell
    └──📁 Support
        ├── AppDelegate.swift
        ├── SceneDelegate.swift
        ├── Assets.xcassets
        ├── Colorsets.xcassets
        └── Info.plist

✉️ Commit Convention

[CHORE] 코드 수정, 내부 파일 수정 
[FEAT] : 새로운 기능 구현 
[ADD] : Feat 이외의 부수적인 코드 추가, 라이브러리 추가, 새로운 파일 생성 시, 에셋
[HOTFIX] : issue나, QA에서 급한 버그 수정에 사용
[FIX] : 버그, 오류 해결 
[DEL] : 쓸모없는 코드 삭제 
[DOCS] : README나 WIKI 등의 문서 개정
[MOVE] : 프로젝트 내 파일이나 코드의 이동  
[REFACTOR] : 전면 수정이 있을 때 사용

✨Github Management

🍏 ZEPETO-iOS Gitflow 🍏
1. Issue를 생성한다.
2. feature Branch를 생성한다.
3. Add - Commit - Push - Pull Request 의 과정을 거친다.
4. Pull Request가 작성되면 작성자 이외의 다른 팀원이 24시간 이내에 Code Review를 한다.
5. Code Review가 완료되면 Pull Request 작성자가 develop Branch로 merge 한다.
6. 종료된 Issue와 Pull Request의 Label과 Project를 관리한다.

🌴 브랜치


📌 브랜치 단위

  • 브랜치 단위 = 이슈 단위 = PR단위

📌 브랜치명

  • 브랜치는 뷰 단위로 생성합니다. ('UI / Func' 로 기능 세부 구분)
  • 브랜치 규칙 → feature/#이슈번호-(UI/Func)-탭(스크린)-기능간략설명
  • ex) feature/#1-UI-Main-MakeNaviBar

💡 이슈, PR 규칙


📌 Issue명 = PR명

  • ✨ [FEAT]
  • ➕ [ADD]
  • 🔨 [FIX]
  • ♻️ [REFACTOR]
  • ✅ [CHORE]