API Design Guidelines

kimhyeji·2022년 7월 20일

기본 개념


  • 사용 시점의 명확성
    • 메소드, 프로퍼티 등의 개체를 명확하고 간결하게
    • 평가는 문맥상 명확하게 이해되는지를 기준으로
  • 간결성보다 중요한 명료성
  • 선언에 대한 주석 작성
    • 선언된 개체에 대한 설명 요약
    • 한줄로, 완전한 문장이 아닌, 마침표로 끝맺음
    • 어떤 일을 수행하고
    • 어떤 것을 반환하고
    • 어떤 것에 접근하고
    • 이니셜라이저가 무엇을 생성하고
    • 선언된 개체가 무엇이고
    • 심볼 문서 마크업 참고

네이밍


  • 필요한 단어 사용 : 모호성 방지
  • 불필요한 단어 생략
  • 엔티티의 역할에 맞는 이름 선택
    • 역할이 Protocol이라면, Protocol을 포함
  • 파라미터의 역할이 명확하게 나타나는 이름 선택

능숙한 사용을 위한 노력


  • 문법상 영어 문구 형태 선호
  • 팩토리메소드의 이름은 make로 시작
  • 첫번째 인자와의 연속성은 불필요
  • 사이드이펙트가 없는 것은 명사구
  • 사이드이펙트가 있는 것은 동사구
  • mutating 메소드는 동사의 명령어 수식
  • nonmutating 메소드는 -ed/-ing과 같은 접미사를 사용(보통 -ed 사용)
    • 직접적인 목적어로 인해 -ed의 사용이 어려우면, -ing 사용
  • 명사에 의해 연산 설명이 가능하다면
    • mutating은 form 접두사를 사용
    • nonmutating은 명사 그대로 사용
  • Boolean 메소드와 속성 사용은 nonmutating일 때, 수신자의 주장으로 이해
    • 예를 들어, isEmpty
  • 무엇인지를 설명하는 프로토콜은 명사로
  • 기능을 설명하는 프로토콜은 -able/-ible/-ing와 같은 접미사 사용
  • 타입, 속성, 변수, 상수는 명사

전문 용어의 적절한 사용


  • 굳이 필요치 않은 어려운 용어 사용 금지
  • 전문 용어를 사용한다면, 기존 의미에 충실하게
  • 약어는 비추천
  • 넓게 사용되는 선례 용어 선호

규칙


  • free 함수보다는 메소드와 프로퍼티 선호
    • 명백한 self가 없거나, 함수가 generic하거나 등등
  • case convention을 따르자
    • 두문자어는 모두 대문자이거나, 소문자이거나로 일관되게(IAP, ASCII, …)
    • 다른 약어는 일반적인 단어로 취급
  • 반환타입에 오버로딩을 피하자

매개변수


  • 문서(요약주석)을 쉽게 읽을 수 있도록 매개변수 이름 설정
  • 일반적인 사용을 단순화할 때, 공통적으로 사용되는 값이 하나라면 기본값을 명시해 가독성 향상
    • foo(bar: nil)과 foo()은 동의어가 아님

인자 레이블


  • 인자가 유용하게 구별될 수 없을 때에는 모든 레이블 생략
  • 인자에 전치사가 포함되는 경우, 명확한 추상화를 위해 인자가 아닌 이름에 전치사 사용
  • 구문은 올바른 의미를 전달하는 것이 가장 중요함

특별 지침


참고
https://minsone.github.io/swift-internals/api-design-guidelines/?utm_source=soojinro&utm_medium=referral

0개의 댓글