契約による設計とは
ざっくりいうと、APIの提供元が、 「このようにAPIを呼んでね」という仕様を提示して、 呼び出し元がそれを守ることを前提とした設計です。
Javaでざっくりやるには
本当の定義では「事前条件」「事後条件」「不変条件」があるようですが、 例えばJavaの場合はこんな感じでやってます。
- Javadocやアノテーションを使って満たすべき仕様を記載
- Objects#requireNonNull()などで事前条件のチェック
- 仕様を満たさない場合はIllegalArgumentExceptionなど非チェック例外を投げる
- 単体テストで事後条件、不変条件をチェック