優雅なテクノロジーコース1級レビュー
1級期間中にミッションを行った時に初めて新しいことをたくさん知りました
その中のすべての任務には大きな収穫がある.
レーシングゲームの条件の中で、前進条件は以下の通りです.
0から9までの間のランダム値を求めた後、ランダム値が4より大きい場合は前進し、値が3より小さい場合は停止する.
その実施は非常に簡単です.
上記のコードの
テストコードは成功するか、失敗するかのいずれかです.数値が変化するからです.
では、
インターフェース.
インタフェースは、関連しないクラス間で関係を確立できます.
これにより、前進条件をテストできます.
次の例を示します.
パラメトリックインタフェース.これは、
なぜなら、
すなわち,レーシングカーのビジネスロジックでは実際の前進条件を実施し,テストコードではtrueを返さなければならない.
上記のインタフェースを十分に活用すれば、複雑な部分をテストしながら、オブジェクトに柔軟性を提供することができます.
オブジェクト間のコラボレーション関係を作成する場合、インスタンス変数は通常、次のようにオブジェクトに宣言されます.
便利なコード実装
インスタンス変数をオブジェクトに宣言することで、コラボレーションが必要なオブジェクトにリクエストを容易に送信できます.これは、宣言メソッドでコラボレーションを要求するオブジェクトインスタンスのプロセスを低減できるためです.
読みやすさを向上させる.
インスタンス変数宣言は、メソッド内でインスタンスを作成したり、パラメータを介して必要なインスタンスのコードを受信したりすることを低減し、オブジェクト全体の可読性を向上させることができます.
したがって、インスタンス変数を宣言すると、実装の使いやすさと読み取りがメリットになります.
では、すべてのコラボレーションを要求するオブジェクトをインスタンス変数として宣言することをお勧めしますか?
オブジェクトがステータスでない場合は、インスタンス変数として宣言できます.
プログラムの実行時に、私たちが設定した順序で実行することは保証されていないからです.
したがって、プログラムの実行中にインスタンス変数の状態が所望の値と異なる場合があり、プログラムエラーの原因になる可能性があります.
したがって、インスタンス変数の宣言は慎重に考慮する必要があります.また、必要でない場合は、インスタンス変数の宣言は避けてください.
次に、必要なインスタンス変数を示します.
オブジェクト内で独立してリクエストを処理する必要があります.
ビジネスロジックの処理に必要なステータスを維持する必要がある場合は、プログラムの正しい操作を保証するために、インスタンス変数として宣言する必要があります.
レベル1のミッションを行った時に初めて知った
プログラムの機能をテストするのに役立ちます.
テストコードがない場合は、機能を実装するたびにプログラムを実行し、エラーがないことを確認します.
ただし、テストコードを作成すると、プログラムを実行することなく機能をテストできます.
エラーを発見しやすくなります.
完全なプログラムを実装した後、状況に応じて論理を変更または変更する必要がある場合があります.テストコードがない場合、ロジックを変更するときに、以前に発生したことのないエラーや問題が発生しても、簡単に認識して解決することは困難です.ただし、
不安要因を取り除く.
コード量が増加したときにテストコードがない場合、すべてのコードが正常に動作しているかどうかを判断するのは難しい.しかしながら、
これは、コードを実行しながら、オブジェクトごとのメソッドが正常に動作しているかどうかをテストするためです.
その中のすべての任務には大きな収穫がある.
テスト難易度-レーシングカーゲーム
レーシングゲームの条件の中で、前進条件は以下の通りです.
0から9までの間のランダム値を求めた後、ランダム値が4より大きい場合は前進し、値が3より小さい場合は停止する.
その実施は非常に簡単です.
public class Car {
private int position = 0;
public void moveCar() {
if (movable()) {
position++;
}
private boolean movable() {
int randomValue = random.nextInt(10);
return randomValue >= 4;
}
}
random.nextInt()
の値が4より大きい場合、論理はposition
を移動する.上記のコードの
position
の変化をテストするとどうなりますか?テストコードは成功するか、失敗するかのいずれかです.数値が変化するからです.
では、
position
の変化をどのようにテストしますか?インターフェース.
インタフェースの使用
インタフェースは、関連しないクラス間で関係を確立できます.
これにより、前進条件をテストできます.
次の例を示します.
public class Car {
private int position = 0;
public void moveCar(final MoveStrategy moveStrategy) {
if (moveStrategy.movable()) {
position++;
}
}
public interface Movable {
boolean movable();
}
上記の例は、moveCar()
インターフェースをパラメータとしてmoveStrategy
に渡す.moveCar()
の内部論理からmoveStrategy
メソッドが呼び出される.パラメトリックインタフェース.これは、
moveCar()
の方法の柔軟性を提供する.なぜなら、
moveStrategy.movable()
に2つのクラスを実装し、ビジネスロジックおよびテストコードで他のクラスを渡すことができます.すなわち,レーシングカーのビジネスロジックでは実際の前進条件を実施し,テストコードではtrueを返さなければならない.
上記のインタフェースを十分に活用すれば、複雑な部分をテストしながら、オブジェクトに柔軟性を提供することができます.
インスタンス変数の宣言条件
オブジェクト間のコラボレーション関係を作成する場合、インスタンス変数は通常、次のようにオブジェクトに宣言されます.
public class LottoMachine {
private TotalLottoCount totalLottoCount;
private Lottos lottos;
...
}
インスタンス変数宣言には、次の2つの利点があります.便利なコード実装
インスタンス変数をオブジェクトに宣言することで、コラボレーションが必要なオブジェクトにリクエストを容易に送信できます.これは、宣言メソッドでコラボレーションを要求するオブジェクトインスタンスのプロセスを低減できるためです.
読みやすさを向上させる.
インスタンス変数宣言は、メソッド内でインスタンスを作成したり、パラメータを介して必要なインスタンスのコードを受信したりすることを低減し、オブジェクト全体の可読性を向上させることができます.
では、すべてのコラボレーションを要求するオブジェクトをインスタンス変数として宣言することをお勧めしますか?
オブジェクトがステータスでない場合は、インスタンス変数として宣言できます.
プログラムの実行時に、私たちが設定した順序で実行することは保証されていないからです.
したがって、プログラムの実行中にインスタンス変数の状態が所望の値と異なる場合があり、プログラムエラーの原因になる可能性があります.
したがって、インスタンス変数の宣言は慎重に考慮する必要があります.また、必要でない場合は、インスタンス変数の宣言は避けてください.
次に、必要なインスタンス変数を示します.
自分の状態を保たなければなりません。
オブジェクト内で独立してリクエストを処理する必要があります.
ビジネスロジックの処理に必要なステータスを維持する必要がある場合は、プログラムの正しい操作を保証するために、インスタンス変数として宣言する必要があります.
TDD
レベル1のミッションを行った時に初めて知った
TDD
また,TDD
でタスクを行う過程で,TDD
を用いる理由を考えた.プログラムの機能をテストするのに役立ちます.
テストコードがない場合は、機能を実装するたびにプログラムを実行し、エラーがないことを確認します.
ただし、テストコードを作成すると、プログラムを実行することなく機能をテストできます.
エラーを発見しやすくなります.
完全なプログラムを実装した後、状況に応じて論理を変更または変更する必要がある場合があります.テストコードがない場合、ロジックを変更するときに、以前に発生したことのないエラーや問題が発生しても、簡単に認識して解決することは困難です.ただし、
TDD
で実装されたテストコードとロジックを使用して漸進的に再設計し、テストコードを変更し、ロジックを変更すると、エラーや問題を簡単に発見し、解決できます.これは、既存のテストコードが破壊されないように、漸進的な再設計の過程で修正されたためです.不安要因を取り除く.
コード量が増加したときにテストコードがない場合、すべてのコードが正常に動作しているかどうかを判断するのは難しい.しかしながら、
TDD
に基づいて開発を行うと、実施した機能に問題がないことを確保することができる.これは、コードを実行しながら、オブジェクトごとのメソッドが正常に動作しているかどうかをテストするためです.
Reference
この問題について(優雅なテクノロジーコース1級レビュー), 我々は、より多くの情報をここで見つけました https://velog.io/@gudonghee2000/우아한-테크코스-레벨1-돌아보기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol