DIとは何かを味わう


DI. どうしてそんなに難しいの?


「ソフトウェアエンジニアリングでは、依存注入は、あるオブジェクトが別のオブジェクト依存性を提供できるようにする技術です.」依存性はオブジェクトです.たとえば、サービスとして使用できます.「クライアントがどのサービスを使用するかを指定するのではなく、クライアントがどのサービスを使用するかを教えます.」注入は、使用するオブジェクトに依存性を渡すことを意味します.サービスはクライアントのステータスの一部です.モデルの基本的な要件は、クライアントがサービスを構築または検索できるようにするのではなく、クライアントにサービスを提供することです.
上記で引用したキーワードは의존성 주입で、グーグル検索では最上位の文章に依存性注入という言葉が定義されています.DIが何であるかを把握している状況で見ても、集中してこそ理解できるのですが、初めて学ぶ立場では、外星語を見ているような感覚になり、勉強を始める挑戦への興味が急激に低下してしまいます.(もちろん、私も)
この文章は彼らのDI試聴文章になるだろう.では、DIが何なのか食べてみましょう.

まず、DIとは何かを理解してみましょう。



DIは依存注入の略である.
別々に考えると、他のものに頼って生活したり、存在したりする意味の依存性と、あるものに注入する意味に分けられます.
文字通りの意味では理解できないかもしれない.以上の図を例に添付して説明します.
アルコール依存は私自身がアルコール依存という意味ですが、この言葉を注ぐと、「あなたは今アルコール依存者になります」と言われるように、アルコール依存にさせられます.
このように,依存性注入は「あるオブジェクトに依存性を注入する」ことである.
より現実的な例を見て、DIをさらに深く理解しましょう.

最近、開発者の求人公告を見ると、コーヒーを無制限に提供する福祉が見られ、開発者にとってコーヒーは不可分な存在になっている.集中しなければならない仕事がたくさんあるので、開発者はコーヒーに非常に依存しています.
つまり、開発者はコーヒーに依存している.しかし、すべての開発者がアメリカンコーヒーに依存しているとは言えない.
一部の開発者はアイスアメリカンコーヒーを飲み、一部の開発者はアイスカフェラテを飲む.このように、誰もが自分の欲しいコーヒーを持っています.
まとめてみると「開発者になると、それぞれの好きなコーヒーの種類への依存性が植え込まれます」.

開発者のように、コードで見てみましょう。


このセクションでは、コードを記述します.人のハーモニーを見ようと思うと、とっくにめまいがした.
しかし、帰らなくてもクリアできないコードかもしれません.
私が欲しいのは、「この記事を読んだ皆さんが、DIが何かを忘れて開発への興味を失わないようにしてほしい」ということです.
全部で4つのコードブロックがありますが、なぜDIが現れたのかをコードで説明しましょう.
開発者は朝起きてコーヒーを買って飲む出勤シーンをコードで書く.
const wakeUp = async() =>{
  await 핸드폰끄기()
  await 이불정리()
}

const moveTo사무실 = async()=>{
  await 샤워()
  await 대중교통To삼성역()
}

await wakeUp() //출근하기위해 핸드폰을 끄고 이불정리를 할 것이다.
await moveTo사무실() //샤워를하고 대중교통을 이용하여 삼성역으로 이동한다.
await 커피주문()
await 커피마시기()
await 출근및일하기()
非常に簡単なコードを作成しました.上から下に読めばいい仕組みで、読みやすくなっています.しかし、問題があります.
「喫茶店でシロップを入れる」「喫茶店でカップを入れる」「牛乳を豆乳に変える」などの機能がたくさん出てきたら、コーヒーを買うすべてのコードに上記の関数を書くべきです.
したがって、出現した概念はClass、すなわち객체지향프로그래밍である.
export class 커피{
  const 시럽추가하기 =()=>{
    //시럽넣기 로직
  }

  const 샷추가 = () =>{
    //샷 추가 로직
  }
  
  const toMilk =()=>{
    // 우유로 바꾸기 로직
  }
}
-----------------------------------------------------------
 public class 개발자 {
   ... //개발자가 할 수 있는 함수(ex. 일어나기, 대중교통타기, 코딩하기)
   const coffee = new 커피()
 }
このようにクラスを作成して管理するとメンテナンスも容易になり(ex.開発者のカフェで氷ごとに間氷にできる機能を追加してください)、コードの数も著しく減少します.
しかし、もう一つ問題があります.もし「アメリカンコーヒーやカプチーノなど、コーヒーにはいろいろな種類があることを願っています」
開発に挑戦するのは頭が痛い.必ずコーヒーの種類によって、糖度や個別の機能があります.
これらの悩みを解決するために、상속の概念が現れた.
export class 커피{
  const 시럽추가하기 =()=>{
    //시럽넣기 로직
  }

  const 샷추가 = () =>{
    //샷 추가 로직
  }
  
  const toMilk =()=>{
    // 우유로 바꾸기 로직
  }
}
public class Cappuccino extends 커피{...} //커피 클래스를 상속받아 만들어진 카푸치노 클래스
public class Americano extends 커피{...} //커피 클래스를 상속받아 만들어진 아메리카노 클래스

-----------------------------------------------------------
 public class 개발자 {
   ... //개발자가 할 수 있는 함수(ex. 일어나기, 대중교통타기, 코딩하기)
   const coffee = new Cappuccino()
		또는
   const coffee = new Cappuccino()
 }
開発者は今、出勤時にカフェに行って欲しいコーヒーを注文することができます.
しかし、問題も発生します.申氏が開発者の時、「うん、この開発者はカフェラテが好きな開発者だろう」「この開発者はアメリカンコーヒーが好きな開発者だろう」と悩む.
でも心配はありませんでした.私たちは上のように受け継ぐ絶妙な方法を知っているからです.
...
public class Cappuccino extends 커피{...} //커피 클래스를 상속받아 만들어진 카푸치노 클래스
public class Americano extends 커피{...} //커피 클래스를 상속받아 만들어진 아메리카노 클래스

-----------------------------------------------------------
 public class 카푸치노개발자 {
   ... //개발자가 할 수 있는 함수(ex. 일어나기, 대중교통타기, 코딩하기)
   const coffee = new Cappuccino()
 }
 
 public class 아메리카노개발자 {
   ... //개발자가 할 수 있는 함수(ex. 일어나기, 대중교통타기, 코딩하기)
   const coffee = new Americano()
 }
 
 -----------------------------------------------------------
 public class 개발자만들기{
   const 이관형 = new 아메리카노개발자()
   const foo = new 카푸치노개발자()
 }
こつこつと完璧にやった

????????????????????
...作成する必要がある開発者クラスは30を超えています.
このような不便を解消するためにDIが登場した.私たちの例に戻って、簡単に説明すると、神は開発者を作成する際に、「カプチーノが好きな開発者」や「アメリカンコーヒーが好きな開発者」から選択したわけではありません.
開発者の過程で、「カプチーノが好き」と催眠したと言える.
...
public class Cappuccino extends 커피{...} //커피 클래스를 상속받아 만들어진 카푸치노 클래스
public class Americano extends 커피{...} //커피 클래스를 상속받아 만들어진 아메리카노 클래스

-----------------------------------------------------------
 public class 개발자 {
   private readonly coffee:Coffee
   constructor (_coffee:Coffee) { //생성자를 이용해서 좋아하는 커피를 주입받게된다.
     this.coffee = _coffee
   }
 }
 
 -----------------------------------------------------------
 public class 개발자만들기{
   const americanoCoffee = new Americano()
   const 이관형 = new 개발자(americanoCoffee) //이관형은 이제 아메리카노를 좋아하는 개발자다.
 }
このように、開発者が作成する際には、コーヒーの種類を注入することで、コーヒーの種類がどんなに大きくても、開発者の等級は一体となっています.

文章が終わったら


すべての開発方法(ex.オブジェクト向け、DI...)「機械製図」はプログラミング上の不便を解決するために発売された.
そのため、以前のいかなる不便を解消することから始めて、焦らないで、ゆっくり理解して、自然に“あはは”理解することができます.