Skip to content

Coding Convention

EUNSU SEO edited this page Aug 15, 2023 · 8 revisions

네이밍

변수

  • lowerCamelCase 사용
  • 복수의 의미를 담는 경우 끝에 s 붙이기

함수

  • lowerCamelCase 사용
  • 기본적으로 동사원형으로 시작
func printSomething(){
  // ...
}
  • 이벤트핸들링 함수의 경우 will, did를 붙여 시점에 대한 정보를 추가
func didFinishFetch(){
}

func willFinishFetch(){
}

func workDidChange(){
}
  • 데이터를 가져오는 함수는 get이 아닌 fetch, request를 사용
    • fetch: 요청 실패없이 결과를 바로 반환할때 (func fetchData() -> Data)
    • request: 데이터 요청 실패 가능성이 있는 함수 (func requestData() -> Data?)

열거형

  • 열거형의 이름은 UpperCamelCase 사용
  • 각 case는 lowerCamelCase사용

구조체 및 클래스

  • 구조체 및 클래스 이름은 UpperCamelCase 사용

  • 구조체 및 클래스 이름에 접두사 사용 X

  • 프로퍼티 및 메서드는 lowerCamelCase 사용

  • 계산속성 및 속성감시자가 있는 구조체 / 클래스 프로퍼티는 나머지 속성 선언 끝에 위치

// good
var name: String
var age: Int {
  didSet {
     print("26..")
  }
}

// bad
var age: Int {
  didSet {
     print("26..")
  }
}
var name: String

델리게이트

  • 프로토콜로 델리게이트 패턴 구현
  • 함수 첫번째 인자는 델리게이트 소스객체로 지정하며 아규먼트 레이블은 와일드카드 패턴으로 지정
  // 델리게이트의 소스 객체만을 메서드의 인자로 받는 경우
    protocol UserScrollViewDelegate {
        func scrollViewDidScroll(_ scrollView: UIScrollView)
        func scrollViewShouldScrollToTop(_ scrollView: UIScrollView) -> Bool
    }

    // 델리게이트의 소스 객체 다음에 추가적인 인자를 받는 경우
    protocol UserTableViewDelegate {
        func tableView(
            _ tableView: UITableView,
            willDisplayCell cell: Cell,
            cellForRowAt indexPath: IndexPath)
        )
        func tableView(
            _ tableView: UITableView,
            numberOfRowsInSection section: Int) -> Int
        )
    }

주석

  • 최대한 간결하게, 핵심만 작성
  • 함수 및 메서드는 동작과 반환 형태에 대해 설명하며 nil 또는 Void리턴타입에 대해서는 설명 생략
  • 퀵헬프를 통해 작성한 주석을 확인합니다. ///를 붙여 주석을 작성
    • 첫줄에 함수 동작을 설명하고, 나머지는 마크다운 문법으로 작성 가능
/// 함수 동작 설명
/// - 파라미터1 설명
/// - 파라미터2 설명
func addData(name: String, age: Int){
}
  • 개발중인 코드는 FIXME 또는 TODO로 추후 작업계획과 함께 표기

들여쓰기

  • 인덴테이션은 스페이스 4를 기본으로 지정

띄어쓰기

  • 콜론 사용시 콜론기준 오른쪽에만 공백 한칸 삽입 (let jun: Person)

클로져

  • 트레일링 클로져 다음 규칙에 맞춰 사용
    1. 클로저 파라미터 타입, 리턴타입은 유추
    2. 아규먼트 레이블 생략
    3. 소괄호 생략
// 1. 기본 함수
func someFunction(closure: (Int) -> Void) {
  
}

// 2. 규칙이 적용된 트레일링 클로져
func someFunction{ int in
}

타입

타입 추론

  • 타입 추론을 기본으로 하여 코드를 작성하며 필요한 경우에만 명시적 선언

타입 어노테이션

  • 타입은 단축구문으로 작성
// good
var member: [String: String]

// bad
var member: Dictionary<String, String>

파일관리

  • 모듈 import는 알파벳 오름차순으로 정렬
  • 단, import UIKit이나 import Foundation은 맨 위에 적고 한 줄 공백 후 다른 라이브러리를 적는다.
  • 중복된 것 제거

파일이름

  • 약어는 사용하지 않습니다.✨

    • Btn → Button
    • VC → ViewController
  • 애매할 때 팀원들과 상의합니다.

  • Extension 파일은 ViewController+ 과 같이 명명합니다.

    ex) HomeViewController+

  • Extenstion 코드들은 우선 같은 파일 안에 넣습니다!

230814 업데이트

뷰 코드 작성순서

코드 각 섹션은 MARK로 구분합니다.

  • // MARK: - Subviews
  • // MARK: - Properties
  • // MARK: - Life Cycle
  • // MARK: - Functions
    • override
      • render
      • configUI
    • helpers
  • // MARK: - @objc Functions