Skip to content

코드 컨벤션

Forest Lee edited this page Nov 5, 2024 · 1 revision

네이밍

클래스와 구조체

  • 클래스와 구조체의 이름은 UpperCamelCase를 사용합니다.
  • 클래스 이름에는 접두사(Prefix)를 붙이지 않습니다.

함수

  • list, array 같은 네이밍은 지양, 복수형 사용 지향합니다.

  • 액션 함수의 네이밍은 '동사 + 목적어' 형태를 사용합니다.

    • ex)buttonDidTapped
  • 만약 특정 View에서 일어난 것을 명시하고 싶다면, buttonDidTappedAtLoginView과 같이 At뒤에 View를 명시합니다.

    • sender를 보낼 수 있으면 우선적으로 보낸다.
  • will은 특정 행위가 일어나기 직전이고, did는 특정 행위가 일어난 직후입니다.

  • should, is는 일반적으로 Bool을 반환하는 함수에 사용됩니다.

  • self는 생략을 원칙으로 합니다.

  • 함수명 혹은 프로퍼티가 가려질 때만 self를 사용합니다.

  • 뷰 레이아웃 메서드는 아래와 같은 네이밍으로 작성합니다.

    func setupViewAttributes() {}
    func setupViewHierarchies() {}
    func setupViewConstraints() {}
    
  • UI 컴포넌트는 프로퍼티로 생성을 한다음, setupViewAtrributes()에서 속성을 정의합니다.

  • UI 컴포넌트는 타입을 지정하고 .init으로 생성하지 않습니다.

  • required init?(coder: NSCoder)에는 @available(*, unavailable)을 붙여 코드베이스 환경을 지킵니다.

    @available(*, unavailable)
    required init?(coder: NSCoder) {
      fatalError("init(coder:) has not been implemented")
    }

익스텐션

  • private 메서드는 extension에 작성합니다.
private extension SomeClass { }
  • bind 메서드 extension, ui 관련 메서드 extension, delegate extension 처럼 extension을 사용하여 구분합니다.
  • 프로토콜은 익스텐션에서 채택하고 준수합니다.

약어

  • 약어는 소문자로 표기합니다.

    let userId: Int?
    let html: String?
    let websiteUrl: URL?
    let urlString: String?

변수

  • 변수에 접미사로 뷰의 타입을 붙입니다.
  • Array와 Dictionary<T: U> 보다는 [T], [T: U]를 사용합니다.
  • 상수를 정의할 때에는 enum를 만들어 비슷한 상수끼리 모아둡니다. 재사용성과 유지보수 측면에서 큰 향상을 가져옵니다. struct 대신 enum을 사용하는 이유는, 생성자가 제공되지 않는 자료형을 사용하기 위해서입니다

코드 레이아웃

들여쓰기 및 띄어쓰기

  • 콜론(:)을 쓸 때에는 콜론의 오른쪽에만 공백을 둡니다.

    let names: [String: String]?
    

최대 줄길이

  • 한 줄은 최대 120자를 넘지 않아야합니다. → lint 룰 적용

줄바꿈

  • 함수 정의가 최대 길이를 초과하거나, 파라미터가 3개 이상인 경우에는 아래와 같이 줄바꿈합니다.

    // 출처 : https://github.com/StyleShare/swift-style-guide
    func collectionView(
      _ collectionView: UICollectionView,
      cellForItemAt indexPath: IndexPath
    ) -> UICollectionViewCell {
      // doSomething()
    }
    
    func animationController(
      forPresented presented: UIViewController,
      presenting: UIViewController,
      source: UIViewController
    ) -> UIViewControllerAnimatedTransitioning? {
      // doSomething()
    }
  • 함수를 호출하는 코드가 최대 길이를 초과하거나, 파라미터가 3 개 이상인 경우에는 파라미터 이름을 기준으로 줄바꿈합니다.

    // 출처 : https://github.com/StyleShare/swift-style-guide
    let actionSheet = UIActionSheet(
      title: "정말 계정을 삭제하실 건가요?",
      delegate: self,
      cancelButtonTitle: "취소",
      destructiveButtonTitle: "삭제해주세요"
    )
  • 단, 파라미터에 클로저가 2개 이상 존재하는 경우에는 무조건 내려쓰기합니다.

    // 출처 : https://github.com/StyleShare/swift-style-guide
    UIView.animate(
      withDuration: 0.25,
      animations: {
        // doSomething()
      },
      completion: { finished in
        // doSomething()
      }
    )
  • if let 구문이 길 경우에는 줄바꿈하고 한 칸 들여씁니다.

    // 출처 : https://github.com/StyleShare/swift-style-guide
    if let user = self.veryLongFunctionNameWhichReturnsOptionalUser(),
       let name = user.veryLongFunctionNameWhichReturnsOptionalName(),
       user.gender == .female {
      // ...
    }
  • guard let 구문이 길 경우에는 줄바꿈하고 한 칸 들여씁니다. else는 guard와 같은 들여쓰기를 적용합니다.

    // 출처 : https://github.com/StyleShare/swift-style-guide
    guard let user = self.veryLongFunctionNameWhichReturnsOptionalUser(),
          let name = user.veryLongFunctionNameWhichReturnsOptionalName(),
          user.gender == .female
    else {
      return
    }
  • 축약 바인딩이 가능하다면, 축약바인딩을 사용합니다.

    let someProperty: Any?
    if let someProperty { }

기타

빈 줄

  • 모든 파일은 빈 줄로 끝나도록 합니다.

마크 다운

  • MARK 구문 위는 공백이 필요하며 MARK 구문은 아래에 붙여 사용합니다.
// MARK: - 이런식으로
  • 마크다운은 다음과 같은 것을 구분합니다.
    • UI Component
    • Initializers
    • Life Cycle
    • Extension마다 (Private Extension, Delegate…)

주석

  • 데모 코드에는 주석을 반드시 남깁니다.

    // 데모 코드에는 주석을 반드시 남깁니다.
    titleLabel.text = "SSSSSS"
  • public 함수에는 설명하는 주석을 반드시 남깁니다.

    ///public 함수에는 설명하는 주석을 반드시 남깁니다.
    func foo(){ }

임포트

  • 임포트는 알파벳 순으로 정렬합니다.

차은우원빈현빈장원영의

개발 스토리

✏️ 기획


✔️ 규칙


📌 1주차 회의록

데일리 스크럼

회의록

회고

📌 2주차 회의록

데일리 스크럼

회의록

회고

📌 3주차 회의록

데일리 스크럼

회의록

회고

📌 4주차 회의록

데일리 스크럼

회의록

회고

📌 5주차 회의록

데일리 스크럼

회의록

회고

📌 6주차 회의록

데일리 스크럼

회의록

회고


🔥 트러블슈팅

Clone this wiki locally