Skip to content

Latest commit

 

History

History
66 lines (56 loc) · 4.76 KB

아이템31_문서로_규약을_정의하라.md

File metadata and controls

66 lines (56 loc) · 4.76 KB

아이템 31: 문서로 규약을 정의하라

  • 이 함수가 무엇을 하는지 명확하게 설명하고 싶다면, KDoc 주석을 붙여 주는 것이 좋습니다.
  • 일반적인 문제
    • 행위가 문서화되지 않고, 요소의 이름이 명확하지 않다면 이를 사용하는 사용자는 우리가 만들려고 했던 추상화 목표가 아닌, 현재 구현에만 의존하게 된다는 것입니다.
    • => 예상되는 행위를 문서로 설명 함으로써 해결합니다.

규약

  • 어떤 행위를 설명하면 시용자는 이를 일종의 약속으로 취급하며, 이를 기반으로 스스로 자유롭게 생각하던 예측을 조정합니다.
  • 예측되는 행위를 요소의 규약(contract of an element) 이라고 부릅니다.
  • 규약이 적절하게 정의되어 있다면,
    • => 클래스를 만든 사람은 클래스가 어떻게 사용될지 걱정하지 않아도 됩니다.
  • 서로가 규약을 존중한다면,
    • => 독립적으로 작업해도 모든 것이 정상적으로 기능할 것입니다. 이는 모두에게 편안함과 지유를 줍니다.

규약 정의하기

  • 이름
  • 주석과 문서
  • 타입

주석을 써야 할까?

  • 커뮤니티 의견의 변화
    • 자바 커뮤니티 초기 : ‘문학적 프로그래밍(literate programming)' 이라는 개념이 인기
    • 10년이 지난 후 : 주석 없이도 읽을 수 있는 코드를 작성해야 하는 프로그래밍 방식으로
  • 문서는 프로젝트에서 가장 진실된 내용이 적힌 곳으로 취급됩니다.
  • 함수 이름과 파라미터만으로 정확하게 표현되는 요소에는 따로 주석을 넣지 않는 것이 좋습니다.
    • 예시) 코틀린 표준 라이브러리의 모든 public 함수
    • 이 함수들은 규약을 잘 정리해 주므로, 사 용자에게 지유를 줍니다.

KDoc 형식

  • 주석으로 함수를 문서화할 때 사용되는 공식적인 형식을 KDoc 이라고 부릅니다.
    • KDoc 주석은 /**로 시작해서 */ 로 끝남
    • 이 사이의 모든 줄 은 일반적으로 *로 시작
    • 설명은 KDoc 마크다운이라는 형식으로 작성
  • KDoc 주석의 구조
    • 첫 번째 부분은 요소에 대한 요약 설명 (summaty description)입니다.
    • 두 번째 부분은 상세 설명입니다.
    • 이어지는 줄은 모두 태그로 시작합니다. 태그는 추가적인 설명을 위해 사용됩니다.
  • 관련된 요소 둥에 링크를 걸 때는 대괄호를 사용합니다. 만약 링크 대상에 대한 추가 설명을 입력하고 싶을 때는 대괄호를 두 번 연속해서 사용합니다.
  • 공식적인 코틀린 문서 생성 도구의 이름은 Dokka 입니다.
  • 짧으면서 명확하지 않은 부분을 자세하게 설명하는 문서가 좋은 문서 입니다.

타입 시스템과 예측

  • 타입 계충(type hierarchy) 은 객체와 관련된 중요한 정보입니다.
  • 인터페이스는 우리가 구현해야 한다고 약속한 메서드 목록 이상의 의미를 갖습니다.
  • 리스코프 치환 원칙 (Liskov substitution principle)
    • 클래스가 어떤 동작을 할 것이라 예측되면, 그 서브클래스도 이를 보장해야 합니다.
    • ‘S가 T의 서브타입이라면, 별도의 변경 이 없어도 T 타입 객체를 S 타입 객체로 대체할수 있어야 한다'
  • 사용자가 클래스의 동작을 확실하게 예측할 수 있게 하려면, 공개 함수에 대한 규약을 잘 지정해야 합니다.
  • 표준 라이브러리와 인기 있는 라이브러리에 있는 대부분의 클래스는 그 서브클래스 (와 요소)에 대한 자세한 설명과 규약을 갖고 있습니다.

조금씩 달라지는 세부 사항

  • 언어는 어떤 식으로 작동해도 괜찮지만, 좋은 방식들을 기억하고 이를 적용해서 사용하는 것이 좋습니다.
  • 구현의 세부 사항온 항상 달라질 수 있지만, 최대한 많이 보호하는 것이 좋습니다.
  • 일반적으로 캡슐화를 통해서 이를 보호합니다.
    • 캡슐화는 ‘허용하는 범위’ 를 지정하는 데 도움을 주는 도구입니다.
    • 캡슐화가 많이 적용될수록, 시용자가 구현에 신경을 많이 쓸 필요가 없어지므로, 더 많은 자유를 갖게 됩니다.

정리

외부 API(external API)를 구현할 때는 규약을 잘 정의해야 합니다. 규약은 이름,문서,주석,타입을 통해 구현할 수 있습니다. 규약은 사용자가 객체를 사용하는 방법을 쉽게 이해하는 등 요소를 쉽게 예측할 수 있게 해 줍니다.

규약은 요소가 현재 어떻게 동작하고, 앞으로 어떻게 동작할지를 사용자에게 전달해 줍니다. 규약은 단순한 합의지만, 양쪽 모두가 그 합의를 존중한다면 큰 문제가 없을 것입니다.