🖥️
プログラミング自己主導学習 [Java] DTO(Data Transfer Object)の定義と役割
DTO(Data Transfer Object)
階層間データを伝達するために使用されるオブジェクト。
データのカプセル化(encapsulation)によって不要なデータの露出を放置し、
ネットワークコスト削減及び性能最適化を目的に使用される。
-
データ配信専用:データを保存する役割のみで、別途のビジネスロジックを含まない。
-
読み込み専用または変更可能:不変(immutable)に設計されたり、必要に応じて
可変(mutable)に使用できる。
- 階層間データ移動最適化:クライアント-サーバー、コントローラ-サービス、サービス-リポジトリ間のデータ移動に使用される。
- 階層間の依存性の分離
DTOを使用すると、Controller → Service → Repository構造で各階層が
直接的にエンティティ(Entity)を露出しないことで依存性を低くすることができる。
- セキュリティ性の向上
クライアントに必要なデータのみを配信することで重要なフィールド
(例:パスワード、内部IDなど)を非表示にすることができる。
- ネットワーク及び性能最適化
データベース エンティティには、必要でないフィールドが多い可能性がありますが、
DTOを使用すると、クライアントに必要なフィールドだけを抽出して性能を
改善できる。
- 有効性検査(Validation)適用
DTOクラスに有効性検査を追加し、クライアントから誤った
データを受信したときに事前にフィルタリングすることができる。
(예: Java의 @Valid, @NotNull)
- DTO vs Entity 違い
比較項目 | DTO (Data Transfer Object) | Entity |
---|---|---|
📌 目的 | データの伝達 | データの保存およびビジネスロジックの包含 |
📍 位置 | Controller ↔ Service | Database 関連層 |
🔄 使用範囲 | 階層間のデータ移動 に使用 | 永続性 (Persistence) の管理 |
✅ 有効性検証 | クライアントの入力検証 を主に担当 | データベースとのマッピング に集中 |
🔒 セキュリティ | 重要なデータを除外可能 | すべてのフィールドを含む |
Discussion