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
Slideshow view
Report
Share
Slideshow view
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
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
sn679259
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
Toru Tamaki
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Hiroshi Tomioka
新人研修 後半 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
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NTT DATA Technology & Innovation
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
CRI Japan, Inc.
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
atsushi061452
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
CRI Japan, Inc.
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
WSO2
Recently uploaded
(12)
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
インタフェース完全に理解した
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