🖥️

プログラミング自己主導学習 [Java] DTO(Data Transfer Object)の定義と役割

に公開

DTO(Data Transfer Object)

階層間データを伝達するために使用されるオブジェクト。

データのカプセル化(encapsulation)によって不要なデータの露出を放置し、

ネットワークコスト削減及び性能最適化を目的に使用される。

  1. データ配信専用:データを保存する役割のみで、別途のビジネスロジックを含まない。

  2. 読み込み専用または変更可能:不変(immutable)に設計されたり、必要に応じて

可変(mutable)に使用できる。

  1. 階層間データ移動最適化:クライアント-サーバー、コントローラ-サービス、サービス-リポジトリ間のデータ移動に使用される。
  • 階層間の依存性の分離

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