Skip to content

DevTillDie/SwiftStyleGuide

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 

Repository files navigation

Swift Style Guide (코드 컨벤션)

해당 문서는 DevTilDie 팀이 작성한 Swift 스타일 가이드입니다.

1. File

  • 라인 수는 최대 100줄을 넘기지 않습니다.

    예외
    ⅰ. 수정되거나 생략되어서는 안 되는 의미 있는 텍스트
    ⅱ. import
    ⅲ. 다른 도구에서 생성된 코드

    ✅ Xcode → Preferences → Text Editing → `Page guide at column: 100`
  • 파일은 빈 줄로 끝나야 합니다.

  • 파일은 UTF-8로 인코딩되어야 합니다.

  • 파일명은 클래스 이름을 사용합니다.

    • extension의 경우, 타입+ 형태로 파일 이름을 작성합니다.

2. Code Formatting

2.1. 모듈

  • 모듈은 파일의 헤더 주석 아래에 기재합니다.
  • 첫 번째 모듈 선언문 위와 마지막 모듈 선언문 아래에는 빈 줄을 추가합니다.
  • 내장 프레임워크와 third-party 프레임워크를 구분하여 알파벳 순서로 정렬합니다.

2.2. 변수

  • 변수는 다음과 같은 순서로 구분(빈 줄 추가)하여 정렬합니다.
    • 클로저를 가진 경우, 동일한 종류의 선언 집합 끝에 작성합니다.
// Property Wrapper
@Environment
@StateObject
@ObservableObservable
@FetchRequest 

// State & Binding
@State
@Binding

// 변수 & 상수
private var
private let
var
let

2.3. 빈 줄

  • 빈 줄에는 공백을 넣지 않습니다.
  • 모든 파일은 빈 줄로 끝납니다.

2.4. 들여쓰기

  • 들여쓰기는 공백 4칸을 사용합니다.
    • Xcode에서 ^+i를 눌렀을 때, 적용되는 space를 기준으로 합니다.
  • 코드의 가로 길이는 100자를 넘기지 않습니다.

2.5. 줄바꿈

  • 함수 선언이 길어질 경우, 각 인자 앞 혹은 반환 시그니처나 async, throws와 같은 효과 앞에서 줄바꿈을 해줍니다.
  • 삼항연산자가 길어질 경우, ?: 앞에서 줄바꿈을 해줍니다.
  • 조건문이 여러 줄로 작성될 경우, else 앞에서 줄바꿈을 해줍니다.

2.6. 중괄호

  • 빈 중괄호({ })는 괄호 안에 공백 한 칸을 넣어줍니다.

  • 여는 중괄호 다음에 줄바꿈을 해줍니다.

    예외
    ⅰ. 클로저의 경우, 여는 중괄호가 시그니처를 같은 줄에 두고 in 키워드 다음에 줄바꿈을 해줍니다.
    ⅱ. 여러 줄로 작성된 코드의 경우, 중괄호 앞에 줄바꿈을 해줍니다.

  • 닫는 중괄호 앞에 줄바꿈을 해줍니다.

3. Naming

  • 모든 이름은 1글자로 짓지 않고, 약어만 사용하지 않습니다.
  • 타입과 프로토콜은 PascalCase를, 그 외 나머지의 경우는 lowerCamelCase를 사용합니다.
  • 타입, 프로퍼티, 변수, 상수의 경우 명사형을 사용합니다.

3.1. 변수와 상수

  • 불리언 타입의 경우, isEmpty, hasMember와 같이 작성합니다.
  • 어떤 것이 무엇인지를 설명하는 프로토콜의 이름은 명사형을 사용합니다.
  • 이름은 가장 일반적인 부분이 앞에 오고, 특수한 부분이 뒤에 오게 작성합니다.
  • 타입에 대한 힌트를 이름에 넣어야 합니다.

3.2. 프로토콜

  • 능력을 설명하는 프로토콜의 이름은 접미사 able, ible, 또는 ing를 사용합니다.

3.3. 함수

  • 되도록 get을 붙이지 않습니다.
  • 주어 + 동사 + 목적어의 구조를 갖습니다.
    • will = 행위가 일어나기 직전
    • did = 행위가 일어난 직후
    • should: 불리언 값을 반환하는 경우
  • 이벤트를 처리하는 함수의 이름은 과거 시제를 사용하여 작성합니다.

3.4. 기타

  • 약어를 사용할 경우, 전부 대문자로 작성합니다.

    예외
    약어가 이름의 맨 앞에 올 경우, lowerCamelCase를 따라 전부 소문자로 작성합니다.

  • ViewController가 아니라면, 클래스의 이름을 *Controller와 같이 작성하지 않습니다.

4. Programming Practice

4.1. 함수

  • 반환 값이 없을 경우, Void를 생략합니다.
  • 사용하지 않는 파라미터는 _로 표시합니다.
  • 인자가 없는 경우, ()와 같이 괄호 안에 공백을 넣지 않습니다.

4.2. 클로저

  • 반환 값이 없을 경우, () → () 대신 () → Void를 사용합니다.
  • 괄호 안에 줄바꿈을 추가하거나, 괄호 양쪽에 공백을 추가합니다.
  • 사용하지 않는 파라미터는 _로 표시합니다.
  • 가독성을 위해 후행 클로저 사용을 권장합니다.

4.3. 타입

  • 쉽게 타입을 추론할 수 있는 경우, 타입을 명시하지 않습니다.
  • Array<T>, Dictionary<T: U>보다는 [T], [T: U] 형태를 사용할 것을 권장합니다.

4.4. 연산자

  • range를 제외한 중위표기법을 사용하는 연산자의 경우, 연산자 양쪽에 공백을 추가합니다.
  • 조건문에서는 && 대신 ,를 사용합니다.

4.4. 튜플

  • 명확성을 위해 멤버에 이름을 붙입니다.
  • 필드가 3개 이상 넘어갈 경우, struct를 사용합니다.

4.5. 반목문

  • forEach보다는 for를 사용합니다.

    예외
    ⅰ. forEach가 다른 메소드와 결합하여 사용될 경우
    ⅱ. View 내부에 작성된 경우

4.6. 배열

  • 여러 줄로 작성된 경우, 마지막 요소 뒤에도 ,를 작성합니다.

4.7. 옵셔널

  • 같은 이름으로 언래핑할 경우, 오른쪽 표현 (==와 관련된 부분)은 생략합니다.

5. Comment

  • 주석은 //(코드 관련)와 ///(문서화 관련)를 사용합니다.
  • // MARK를 사용해서 연관된 코드 블록을 다른 코드 블록과 구분해 줍니다.
    • 특히, 익스텐션
  • 서로 공유해야 하는 코드의 경우, 주석을 활용하여 문서화할 것을 권장합니다.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published