effective-swift

item56. 공개된 API 요소에는 항상 문서화 주석을 작성하라

Markup Formatting References in Xcode

로버트 C. 마틴은 그의 저서 클린 코드 에서 주석은 나쁜 코드를 보완하지 못한다 고 했습니다. 허나 어떤 주석들은 개발자의 이해도와 사용성을 높이기에 아주 유용합니다. 이번 아이템에서는 Xcode 내에서 Quick Help 기능을 제공할 수 있는 주석을 작성하는 방법에 대해 알아봅니다.

Xcode Quick Help란?

Markup을 이용해 Swift 코드의 모든 심볼(Class, Method, enum..)에 대해 정형화된 Quick Help 주석을 작성하면 Option키를 클릭했을 때 작성된 주석을 Pop-up 형식으로 확인할 수 있습니다. 또한 입력 포인터가 심볼에 위치해 있을 때 Xcode 오른쪽에 있는 인스펙터 탭에 Quick Help 부분에서 작성된 주석을 확인할 수 있습니다.

<img width=80% alt=”MFR_code_quick_help_2x” src=”https://user-images.githubusercontent.com/40784518/107853021-1c3e7f00-6e57-11eb-9711-3e7c2152d1e5.png”>


기본 Markup

기본적인 Markup 문법을 이용해 작성할 수 있습니다. 각각에 대해 조금 더 자세히 살펴봅시다.

/**
    # 목록

		*이탤릭체*와 **볼드체** 혹은 `코드`를 한 줄에 적용할 수 있습니다.

    ## 순서가 없는 목록

    - 목록을 작성할 수 있지만
    - 각각의 문단은 연관되어있지 않습니다.
    - 그래서 서브목록을 포맷팅하기엔
      - 썩 좋은 방법은 아닙니다.

    ## 순서가 있는 목록

    1. 순서가 있는 목록은
    2. 자동으로 순서대로 정렬됩니다.
    3. 일반적인 숫자로 표기 가능합니다.
*/

<img width = 60% src =”https://user-images.githubusercontent.com/40784518/107854046-b2c16f00-6e5c-11eb-8d21-3283784da439.png”/>


Parameters & Return Values

/**
 받는 사람을 위한 맞춤 인사말을 생성

 - Parameter recipient: 환영 받을 사람

 - Throws: 만약 `recipient`이 "Derek"이면 
					`MyError.invalidRecipient` 발생

 - Returns: `recipient`를 향한 새로운 문자열 반환
 */
func greeting(to recipient: String) throws -> String {
    guard recipient != "Derek" else {
        throw MyError.invalidRecipient
    }

    return "Greetings, \(recipient)!"
}

매개변수가 많은 경우 아래처럼 줄바꿈해 작성할 수 있습니다.

/// 주어진 요소로부터 벡터의 크기를 3차원으로 반환
///
/// - Parameters:
///     - x: vector의 *x*값
///     - y: vector의 *y*값
///     - z: vector의 *z*값
func magnitude3D(x: Double, y: Double, z: Double) -> Double {
    return sqrt(pow(x, 2) + pow(y, 2) + pow(z, 2))
}


Code blocks

코드 블럭을 임베드해 함수의 적절한 사용법이나 구현 세부사항을 보여줄 수 있습니다. 최소한 4개의 공백으로 코드 블럭을 삽입할 수 있습니다. 또는 세개의 백틱( `` ) 또는 틸드(~~~`)로 코드 블럭 앞 뒤를 묶어 구분할 수 있습니다.

/**
    `Shape`의 인스턴스 영역

    생성된 인스턴스 모양에 따라 계산이 달라진다.
		삼각형의 경우 `area`는 다음과 같다

        let height = triangle.calculateHeight()
        let area = triangle.base * height / 2
*/
var area: CGFloat { get }

<img width=60% src=”https://user-images.githubusercontent.com/40784518/107854398-d5ed1e00-6e5e-11eb-9380-c11f9646b926.png”/>


추가적인 필드들

Parameters, Throws, Returns외에도 미리 정의된 키워드들이 있는데, 이를 이용하면 섹션이 생성돼 추가적인 정보를 작성할 수 있습니다.


작성시 유의사항


참고