Submit Search
Upload
インタフェース完全に理解した
•
6 likes
•
6,166 views
torisoup
Follow
2018/9/6 Unity Zenject完全に理解した https://connpass.com/event/96928/ の登壇資料です
Read less
Read more
Technology
Report
Share
Report
Share
1 of 39
Download now
Download to read offline
Recommended
Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介
torisoup
Observableで非同期処理
Observableで非同期処理
torisoup
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
U-dai Yokoyama
UniTask入門
UniTask入門
torisoup
Unityでオンラインゲーム作った話
Unityでオンラインゲーム作った話
torisoup
Unityでオニオンアーキテクチャ
Unityでオニオンアーキテクチャ
torisoup
コールバックと戦う話
コールバックと戦う話
torisoup
【Unity】 Behavior TreeでAIを作る
【Unity】 Behavior TreeでAIを作る
torisoup
Recommended
Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介
torisoup
Observableで非同期処理
Observableで非同期処理
torisoup
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
U-dai Yokoyama
UniTask入門
UniTask入門
torisoup
Unityでオンラインゲーム作った話
Unityでオンラインゲーム作った話
torisoup
Unityでオニオンアーキテクチャ
Unityでオニオンアーキテクチャ
torisoup
コールバックと戦う話
コールバックと戦う話
torisoup
【Unity】 Behavior TreeでAIを作る
【Unity】 Behavior TreeでAIを作る
torisoup
Doozy UI 使おうぜ! #unity_lt
Doozy UI 使おうぜ! #unity_lt
torisoup
MagicOnion入門
MagicOnion入門
torisoup
UniRx完全に理解した
UniRx完全に理解した
torisoup
UniRxでMV(R)Pパターンをやってみた
UniRxでMV(R)Pパターンをやってみた
torisoup
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
Unity Technologies Japan K.K.
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
Unity Technologies Japan K.K.
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
Unity Technologies Japan K.K.
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
ObserverパターンからはじめるUniRx
ObserverパターンからはじめるUniRx
torisoup
ドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かす
増田 亨
大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化
DeNA
【Unite 2018 Tokyo】Unityにおける疎結合設計 ~UIへの適用事例から学ぶ、テクニックとメリット~
【Unite 2018 Tokyo】Unityにおける疎結合設計 ~UIへの適用事例から学ぶ、テクニックとメリット~
UnityTechnologiesJapan002
Unityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTips
Unity Technologies Japan K.K.
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
Unity Technologies Japan K.K.
はじめてのUniRx
はじめてのUniRx
torisoup
MagicOnion~C#でゲームサーバを開発しよう~
MagicOnion~C#でゲームサーバを開発しよう~
torisoup
RPGにおけるイベント駆動型の設計と実装
RPGにおけるイベント駆動型の設計と実装
Koji Morikawa
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
Yoshifumi Kawai
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
UnityTechnologiesJapan002
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
DeNA
Unityで作ったゲームをDLカードで配布してみた話 #roppongiunity
Unityで作ったゲームをDLカードで配布してみた話 #roppongiunity
torisoup
ARでVRアバターを表示するシステムを構築しよう
ARでVRアバターを表示するシステムを構築しよう
torisoup
More Related Content
What's hot
Doozy UI 使おうぜ! #unity_lt
Doozy UI 使おうぜ! #unity_lt
torisoup
MagicOnion入門
MagicOnion入門
torisoup
UniRx完全に理解した
UniRx完全に理解した
torisoup
UniRxでMV(R)Pパターンをやってみた
UniRxでMV(R)Pパターンをやってみた
torisoup
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
Unity Technologies Japan K.K.
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
Unity Technologies Japan K.K.
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
Unity Technologies Japan K.K.
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
ObserverパターンからはじめるUniRx
ObserverパターンからはじめるUniRx
torisoup
ドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かす
増田 亨
大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化
DeNA
【Unite 2018 Tokyo】Unityにおける疎結合設計 ~UIへの適用事例から学ぶ、テクニックとメリット~
【Unite 2018 Tokyo】Unityにおける疎結合設計 ~UIへの適用事例から学ぶ、テクニックとメリット~
UnityTechnologiesJapan002
Unityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTips
Unity Technologies Japan K.K.
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
Unity Technologies Japan K.K.
はじめてのUniRx
はじめてのUniRx
torisoup
MagicOnion~C#でゲームサーバを開発しよう~
MagicOnion~C#でゲームサーバを開発しよう~
torisoup
RPGにおけるイベント駆動型の設計と実装
RPGにおけるイベント駆動型の設計と実装
Koji Morikawa
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
Yoshifumi Kawai
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
UnityTechnologiesJapan002
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
DeNA
What's hot
(20)
Doozy UI 使おうぜ! #unity_lt
Doozy UI 使おうぜ! #unity_lt
MagicOnion入門
MagicOnion入門
UniRx完全に理解した
UniRx完全に理解した
UniRxでMV(R)Pパターンをやってみた
UniRxでMV(R)Pパターンをやってみた
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
オブジェクト指向できていますか?
オブジェクト指向できていますか?
ObserverパターンからはじめるUniRx
ObserverパターンからはじめるUniRx
ドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かす
大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化
【Unite 2018 Tokyo】Unityにおける疎結合設計 ~UIへの適用事例から学ぶ、テクニックとメリット~
【Unite 2018 Tokyo】Unityにおける疎結合設計 ~UIへの適用事例から学ぶ、テクニックとメリット~
Unityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTips
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
はじめてのUniRx
はじめてのUniRx
MagicOnion~C#でゲームサーバを開発しよう~
MagicOnion~C#でゲームサーバを開発しよう~
RPGにおけるイベント駆動型の設計と実装
RPGにおけるイベント駆動型の設計と実装
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
More from torisoup
Unityで作ったゲームをDLカードで配布してみた話 #roppongiunity
Unityで作ったゲームをDLカードで配布してみた話 #roppongiunity
torisoup
ARでVRアバターを表示するシステムを構築しよう
ARでVRアバターを表示するシステムを構築しよう
torisoup
Photon Cloud ことはじめ
Photon Cloud ことはじめ
torisoup
アバター生放送支援アプリ「アバれぽ」
アバター生放送支援アプリ「アバれぽ」
torisoup
UnityとNCMBでユーザ管理を実装してみた話
UnityとNCMBでユーザ管理を実装してみた話
torisoup
Task vs Observable
Task vs Observable
torisoup
UniRxでPUNを使いやすくする
UniRxでPUNを使いやすくする
torisoup
未来のプログラミング技術をUnityで -UniRx-
未来のプログラミング技術をUnityで -UniRx-
torisoup
みくみくまうすについて&Unity で使えるコーディングノウハウ
みくみくまうすについて&Unity で使えるコーディングノウハウ
torisoup
Unity講習会(初級)
Unity講習会(初級)
torisoup
More from torisoup
(10)
Unityで作ったゲームをDLカードで配布してみた話 #roppongiunity
Unityで作ったゲームをDLカードで配布してみた話 #roppongiunity
ARでVRアバターを表示するシステムを構築しよう
ARでVRアバターを表示するシステムを構築しよう
Photon Cloud ことはじめ
Photon Cloud ことはじめ
アバター生放送支援アプリ「アバれぽ」
アバター生放送支援アプリ「アバれぽ」
UnityとNCMBでユーザ管理を実装してみた話
UnityとNCMBでユーザ管理を実装してみた話
Task vs Observable
Task vs Observable
UniRxでPUNを使いやすくする
UniRxでPUNを使いやすくする
未来のプログラミング技術をUnityで -UniRx-
未来のプログラミング技術をUnityで -UniRx-
みくみくまうすについて&Unity で使えるコーディングノウハウ
みくみくまうすについて&Unity で使えるコーディングノウハウ
Unity講習会(初級)
Unity講習会(初級)
Recently uploaded
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
CRI Japan, Inc.
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
CRI Japan, Inc.
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
Toru Tamaki
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NTT DATA Technology & Innovation
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
Hiroshi Tomioka
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Hiroshi Tomioka
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
atsushi061452
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
Toru Tamaki
Recently uploaded
(11)
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
インタフェース完全に理解した
1.
インタフェース 完全に理解した 2018/09/06 とりすーぷ
2.
自己紹介 • とりすーぷ(@toRisouP) • 株式会社バーチャルキャスト •
Unityクライアント開発 • 人類を美少女にする仕事をしてます
3.
インタフェース つかってる?
4.
今回の内容 • インタフェースについて適当につらつらと語る • クラスの継承との意味の違い •
使いみち • 小ネタ Zenject要素はありません
5.
クラスの継承とのちがい
6.
クラスの継承 • AはBである、という属性を引き継ぐ • is-aの関係を満たす •
多重継承できない • 派生クラスは基底クラスのルールを 変えることはできない • リスコフの置換原則
7.
インタフェースの実装 • インタフェースはわりと自由 • is-aの関係は無い •
要求されたふるまいさえ満たせばよい • 必ず「利用者」が存在する • インタフェース定義は利用側が行う
8.
インタフェースの用途
9.
インタフェースの用途 • 疎結合化するのによく使う • オープン・クローズ原則とか、依存関係逆転の原則とか言うアレ •
利用側で仕様を決めることができる • 実装の中身について利用側は知らなくていい • 実装の詳細については別パッケージに押し付けることができる
10.
疎結合化
11.
疎結合化 HumanPackageのやること • IDriveableの定義 • IDriveableを使って何をするか
12.
疎結合化 VehiclePackageのやること • IDriveableの実装をする
13.
インタフェースを使うメリット • 依存関係を整理することができる • オープン・クローズ原則、依存関係逆転の原則を満たすことができる •
利用側と実装側のパッケージをそれぞれ並行して作れる • 分担作業してもあとで破綻しない • ゲームジャムで特に有効
14.
依存の解決
15.
依存の解決 • インタフェースを使うと必須になる作業 • どの実装クラスを実際に使うの? •
インスタンス化は誰がして、どう管理するの?
16.
手法いくつか • Service Locatorパターン •
シングルトンに依存関係を書いて、 クラスが自分でシングルトンに問い合わせるやり方 • DI Containerパターン • DIContainerが各オブジェクトのインスタンス化を管轄する手法 • Zenjectはこれ
17.
どっちがいいのか • 規模が小さいならService Locatorでもよい •
実装がラクですぐ使える • シングルトンへの依存が生まれる点に注意 • DI Containerはハイリスク・ハイリターン • 柔軟な依存関係の制御が可能 • DI Container(Context)の管理自体がまた難しい
18.
インタフェースの小ネタ
19.
プロパティ
20.
プロパティを定義する • インタフェースは「プロパティ」の定義ができる • 必要なパラメータがあればプロパティにしておくと良い •
一応setもできるけど、おすすめはしない(get onlyが良い)
21.
GetComponent
22.
GetComponent • GetComponentはインタフェースを指定できる • 指定インタフェースを実装したコンポーネントがあると取得できる •
Unityの“Tag”代わりに使うこともできなくはない
23.
拡張メソッド
24.
拡張メソッドで機能追加 • インタフェースに拡張メソッドを追加できる • 実装済みの関数をインタフェースに含めることができる •
traitっぽくしたりすることができる
25.
インタフェースは実装を持てない
26.
拡張メソッドに実装を書くことはできる
27.
インタフェースをtraitっぽく使える
28.
Structとインタフェース
29.
structにインタフェース • structにインタフェースを被せることもできる • ただしインタフェース型に代入するとボックス化が起きる
30.
IEquatable<T> • Structの同値判定用のインタフェース • 同値判定をカスタマイズできる •
自動実装されるEquals()よりも、パフォーマンスが向上する • Structを定義したらこれも実装しよう
31.
実装例 • R#とかRider使ってれば、 ほぼ自動で実装してくれる • GetHashCode()とかも 勝手に作ってくれる
32.
明示的な実装
33.
明示的な実装 と 暗黙的な実装 •
インタフェースは「明示的な実装」ができる • インタフェース名を指定して実装 • 暗黙的な実装と、明示的な実装とでは挙動が異なる
34.
例
35.
比較 暗黙的な実装 明示的な実装
36.
比較 暗黙的な実装 明示的な実装 アクセスレベルが異なる!
37.
暗黙的な実装 • 暗黙的な実装をした時のアクセスレベルは「public」 • そのままメソッドコールできる
38.
明示的な実装 • 明示的な実装をした場合は、 インタフェース経由じゃないと呼び出せなくなる • 特殊なアクセスレベルになる
39.
まとめ • インタフェースの用途を覚えよう • 疎結合化するのに使える •
Zenjectを使いこなす前に、インタフェースへの理解が必須 • 意外と機能が多い • インタフェースを使いこなせばパフォーマンス向上する場面もある
Download now