의존성 주입이란? – 종속성 주입을 구현하는 방법을 알고



종속성 주입이란 무엇인가에 대한이 기사는 Spring Boot에서 실습을 통한 종속성 주입에 대한 포괄적 인 가이드입니다.

매일 프로그래밍 언어로 작업하는 세상에서 우리 모두는 삶을 편하게하는 방법과 트릭을 찾는 경향이 있습니다. 음, 의존성 주입은 다른 객체의 의존성을 제공함으로써 개발자 코드를 쉽게 돕는 것을 목표로하는 그러한 기술 중 하나입니다. 종속성 주입이란 무엇인가에 대한이 기사에서는이 기술을 자세히 이해하는 데 도움이 될 것입니다.

이 기사에서는 다음 주제를 다룹니다.





이제이 기사를 시작하겠습니다.

의존성 주입이란?

종속성 주입은 개체가 다른 개체의 종속성을 제공하는 기능입니다.



자, 나는 당신이 위의 기술적 정의로 아무것도 이해하지 못했을 것이라고 확신합니다. 그래서, 당신을 위해 혼란을 제거하겠습니다.

의존성이라는 용어를 들으면 무엇이 떠오 릅니까?

분명히, 지원을 위해 다른 것에 의존하는 것이 맞습니까?



음, 프로그래밍의 경우도 마찬가지입니다.

프로그래밍의 종속성은 클래스가 다른 클래스의 특정 기능을 사용하는 접근 방식입니다. 예를 들어 두 클래스 A와 B를 고려하고 클래스 A가 클래스 B의 기능을 사용한다고하면 클래스 A가 클래스 B의 종속성을 갖는다는 것을 의미합니다. 이제 Java로 코딩하는 경우 알아야합니다. 그, 당신은클래스 A에서 객체를 사용하기 전에 클래스 B의 인스턴스를 만듭니다.

클래스 유형-종속성 주입이란?-Edureka

따라서 이제 종속성 주입을 정의해야한다면 다른 클래스에 대한 객체를 생성하고 종속성을 직접 사용하는 클래스를 종속성 주입이라고합니다.. 주로 세 가지 클래스가 포함됩니다.

  • 클라이언트 클래스 : 이것은 종속 클래스이며 서비스 클래스에 종속됩니다.

  • 서비스 등급 : 이 클래스는 클라이언트 클래스에 서비스를 제공합니다.

  • 인젝터 클래스 : 이 클래스는 서비스 클래스 개체를 클라이언트 클래스에 주입하는 역할을합니다.

이제 종속성 주입이 무엇인지 이해 했으므로 다음으로 종속성 주입의 기반이되는 원칙을 살펴 보겠습니다.

제어 반전

위에서 언급했듯이 Inversion of Control은 Dependency Injection을 만드는 원리입니다. 또한 이름에서 알 수 있듯이 Inversion of Control은 기본적으로 주요 책임이 아닌 클래스의 다른 종류의 추가 책임을 반전하는 데 사용됩니다.

더 간단한 용어로 설명해야한다면 요리 능력이있는 예를 고려해보십시오. IoC 원칙에 따라 제어를 뒤집을 수 있으므로 음식을 조리하는 대신 외부에서 직접 주문할 수 있으며 문앞에서 음식을받을 수 있습니다. 따라서 문앞에서 음식을 배달하는 과정을 제어 반전이라고합니다.

직접 요리 할 필요가 없습니다. 대신 음식을 주문하고 배달 담당자가 음식을 배달하도록 할 수 있습니다. 이렇게하면 추가 책임을 처리 할 필요가없고 주요 작업에만 집중할 수 있습니다.

이제 종속성 주입의 원리를 알았으니 종속성 주입의 유형을 살펴 보겠습니다.

의존성 주입 유형

주로 세 가지 유형의 종속성 주입이 있습니다.

  • 생성자 주입 : 이 유형의 인젝션에서 인젝터는 클라이언트 클래스 생성자를 통해 종속성을 제공합니다.

  • 세터 주입 / 속성 주입 : 이 유형의 주입에서 주입기 메서드는 클라이언트가 노출하는 setter 메서드에 종속성을 주입합니다.

  • 인터페이스 주입 : 이 유형의 주입에서 주입기는 인터페이스를 사용하여 클라이언트 클래스에 대한 종속성을 제공합니다. 클라이언트는 인터페이스를 구현해야합니다.세터 방법어느종속성을 허용합니다.

지금까지는 Dependency Injection이 객체를 생성하고 어떤 클래스가 해당 객체를 필요로하는지 이해하고 마지막으로 해당 클래스에 객체를 제공한다는 사실을 이해했으면합니다. 따라서 그 메모에서 종속성 주입의 이점을 다음으로 살펴 보겠습니다.

의존성 주입의 이점

종속성 주입의 이점을 나열하기 전에 이점을 더 잘 이해하는 데 도움이되도록 산업 수준에서이 주입의 필요성을 설명하겠습니다.

받은 이메일을 처리하는 것이 전적으로 책임이있는 이메일 클래스가있는 시나리오를 고려하십시오. 이제이 클래스에는“To email address”,“From email address”,“Subject and the Body of the email”과 같은 객체가 있습니다.

이제 회사가 문자와 음성 메시지를 저장하고 싶다면이 수업이 메시지를 저장할 수 있다고 생각하세요?

글쎄요, 대답은 '아니요?

이메일 클래스가 텍스트 및 오디오 메시지의 매개 변수를 처리 할 수 ​​없기 때문입니다. 이러한 경우 클래스를 다시 만들어야합니다. 이제 수업을 다시 만드는 것은 특히 정기적으로해야하는 경우 매우 번거로운 작업입니다. 대신 Dependency Injection을 사용하면 런타임에 개체를 변경할 수 있습니다. 따라서 이러한 방식으로 클래스를 다시 만들 필요가 없으므로 많은 방법으로 도움이됩니다.

따라서 Dependency injection의 이점을 요약하면 다음과 같은 이점이 있습니다.

자, 이제 Dependency Injection의 이점을 알았으니 이제 Spring Boot를 사용하여 Dependency Injection을 구현하는 방법을 살펴 보겠습니다.

Spring Boot를 사용하여 DI를 구현하는 방법은 무엇입니까?

1 단계: 당신의 이클립스 IDE 그리고 창조하십시오 Spring Boot 애플리케이션 마우스 오른쪽 버튼을 클릭하고 선택하여 스프링 스타터 프로젝트 . 그런 다음 프로젝트 이름을 언급하고 .

Spring Starter Project를 얻으려면 Eclipse Marketplace에서 Spring Tool Suite를 설치해야합니다. Spring Too Suite가 설치되어 있지 않은 경우 내 기사를 참조하십시오. .

아래와 같이 응용 프로그램 파일이 생성 된 것을 자동으로 확인할 수 있습니다.

2 단계: 다음으로 동일한 패키지에 클래스를 만듭니다. 그렇게하려면 파일을 마우스 오른쪽 버튼으로 클릭-> 수업 그리고 언급 클래스 이름. 그런 다음 . 이것은 수업 파일. 여기에서 Customers 클래스를 만들었습니다. 아래를 참조하십시오.

3 단계 : 그 후에 클래스에 대한 몇 가지 속성을 입력 해 보겠습니다. 그래서 우리는 고객 ID, 고객 이름코스 이름. 아래 코드를 언급하십시오.

package com.example.demo // 패키지 이름 공개 클래스 Customers {private int custid private String custname private String coursename}

3.1 단계 : 그 작업을 마치면 Getter 및 Setter 메서드 생성 이러한 속성에 대해. 이를 위해 이러한 속성을 선택하고 마우스 오른쪽 버튼을 클릭합니다. 그런 다음 선택 출처 -> Getter 및 Setter 메서드를 생성합니다.

지금까지 코드는 다음과 같아야합니다.

package com.example.demo public class Customers {private int custid private String custname private String coursename public int getCustid () {return custid} public void setCustid (int custid) {this.custid = custid} public String getCustname () {return custname } public void setCustname (String custname) {this.custname = custname} public String getCoursename () {return coursename} public void setCoursename (String coursename) {this.coursename = coursename}}

이제 고객에 대한 개체를 만들어야하지만 수동으로 수행하지 않으려는 시나리오를 고려하십시오. 이러한 시나리오에서는 필요할 때마다 개체를 가져 오기 위해 종속성 주입을 사용해야합니다.

그래서 다음으로 우리가 어떻게 똑같은 것을 달성 할 수 있는지 살펴 보겠습니다.

4 단계 : 먼저 런 라인애플리케이션 클래스 파일 다음에 :

ConfigurableApplicationContext 컨텍스트 = SpringApplication.run (DemoApplication.class, args)

참고 : 오류가 발생하면 다음을 가져 오십시오.

import org.springframework.boot.SpringApplication import org.springframework.boot.autoconfigure.SpringBootApplication import org.springframework.context.ConfigurableApplicationContext

위의 코드 줄은 실행시 개체를 반환합니다. 이제 애플리케이션 파일에 다음 코드를 추가합니다.

고객 c = context.getBean (customers.class)

위의 줄은 컴파일러에게 고객 클래스의 개체를 반환하도록 지시합니다. 아래를 참조하십시오.

4.1 단계 : 이제 작동 여부를 확인하려면 Customer 클래스로 돌아갈 수 있습니다. 다음과 같이 메소드를 추가하십시오.

public void display () {System.out.println ( 'Object Returned Successfully')}

이 메서드는 성공적인 실행시 'Object Returned Successfully'라는 출력을 표시합니다.

4.2 단계 : 다음으로 애플리케이션 파일로 돌아가서 다음을 언급해야합니다.

c.display ()

이를 통해 표시 메서드를 참조하여 Customers 클래스의 개체를 호출합니다. 지금까지의 Application 클래스 코드는 아래 이미지를 참조하십시오.

이제 프로젝트를 실행하면 No Qualing Bean of type 예외 . 이것은 당신이 정의한 고객 클래스가 Spring Bean이 아니기 때문입니다. 즉 Spring Object가 아닙니다. 아래를 참조하십시오.

4.3 단계 : 따라서 Spring Container에 알려주려면 고객 클래스의 객체가 필요합니다. 그렇게하려면 다음을 언급해야합니다. @Component 주석 , Customer 클래스에서. Customers 클래스의 코드는 다음과 같아야합니다.

package com.example.demo import org.springframework.stereotype.Component @Component public class Customers {private int custid private String custname private String coursename public int getCustid () {return custid} public void setCustid (int custid) {this.custid = custid} public String getCustname () {return custname} public void setCustname (String custname) {this.custname = custname} public String getCoursename () {return coursename} public void setCoursename (String coursename) {this.coursename = coursename} public void display () {System.out.println ( 'Object Returned Successfully')}}

그런 다음 고객을 언급 할 때 c = context.getBean (customers.class) 컴파일러는 컨테이너에 사용 가능한 고객 빈이 있는지 여부를 확인합니다.

Bean을 사용할 수있는 경우 Spring 프레임 워크는 애플리케이션에 고객 객체를 삽입합니다. 따라서 기본적으로이 객체는 Spring 프레임 워크에 의해 생성되며 애플리케이션에서 추가로 사용할 수 있습니다.

따라서 지금이 프로젝트를 실행하면 Object Returned Successfully라는 출력이 표시됩니다. 아래를 참조하십시오.

이것은 기본적으로 종속성 주입을 구현할 수있는 방법입니다.

예 : 자동 연결 주석을 사용한 종속성 주입

Spring Boot에서 Dependency Injection이 어떻게 작동하는지 이해 하셨기를 바랍니다. 이제이 예제를 확장하고 다른 클래스에 종속 된 클래스가 Spring Boot에서 해당 클래스의 기능을 어떻게 사용했는지 자세히 살펴 보겠습니다.

1 단계: 새로 만들기 클래스 파일 , 다시 패키지를 마우스 오른쪽 버튼으로 클릭 그리고 선택하여 신규-> 클래스. 이제 아래와 같이 클래스 이름을 언급하고 끝.

2 단계: 다음으로 클래스에 대한 몇 가지 속성을 입력하겠습니다. 그래서 우리는 TechID, Techname. 아래 코드를 언급하십시오.

패키지 com.example.demo 공개 클래스 기술 {private int techid private String techname}

2.1 단계 : 완료되면 Getter 및 Setter 메서드 파일을 마우스 오른쪽 버튼으로 클릭 한 다음 소스-> Getter 및 Setter 메서드 생성.

3 단계 : 이제, 우리는“ 성공한 “. 이를 위해 코드를 언급합니다.

public void tech () {System.out.println ( 'Successful')}

지금까지의 코드는 다음과 같습니다.

package com.example.demo public class Technologies {private int techid private String techname public int getTechid () {return techid} public void setTechid (int techid) {this.techid = techid} public String getTechname () {return techname} public void setTechname (String techname) {this.techname = techname} public void tech () {System.out.println ( 'Successful')}}

4 단계 : 이제 전화하려면 tech () 메서드고객 클래스 , 기술 클래스의 개체를 만들어야합니다. 따라서 customers 클래스에서 다음 코드 줄을 언급하십시오.

개인 기술 techdetail

4.1 단계 : 완료되면 Getter 및 Setter 메서드 이러한 속성에 대한 파일을 마우스 오른쪽 버튼으로 클릭 다음 선택 소스-> Getter 및 Setter 메서드 생성.

5 단계 : 다음으로 tech () 메서드 , 당신은 언급해야 techdetail.tech () 아래의 고객 클래스의 표시 방법 . 또한 techdetail 개체가 인스턴스화되었는지 확인하려면 @Component 주석 이다 기술 클래스. 아래를 참조하십시오.

이제이 프로젝트를 실행하면 Null 포인터 예외 . 이것은 이제 고객 클래스는 기술 클래스에 종속되지만 기술 클래스의 존재를 알지 못합니다. .

따라서 고객이 기술 클래스를 인식 할 수 있도록하려면 @Autowired 주석 Customers 클래스에서. 고객 클래스의 최종 코드는 다음과 같아야합니다.

package com.example.demo import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Component @Component public class Customers {private int custid private String custname private String coursename @Autowired private Technologies techdetail public Technologies getTechdetail ( ) {return techdetail} public void setTechdetail (Technologies techdetail) {this.techdetail = techdetail} public int getCustid () {return custid} public void setCustid (int custid) {this.custid = custid} public String getCustname () {return custname } public void setCustname (String custname) {this.custname = custname} public String getCoursename () {return coursename} public void setCoursename (String coursename) {this.coursename = coursename} public void display () {System.out.println ( '개체가 성공적으로 반환 됨') techdetail.tech ()}}

이러한 파일을 실행하면 출력이 Object Returned Successfully and Successful로 표시되며 이는 클래스의 종속성이 충족되었음을 의미합니다. 아래를 참조하십시오.

이제 기사를 마쳤으므로 전 세계에 250,000 명 이상의 만족 한 학습자 네트워크를 보유한 신뢰할 수있는 온라인 학습 회사 인 Edureka에서 작성했습니다.

질문이 있으십니까? 이 '종속성 주입이란 무엇입니까?'의 주석 섹션에서 언급하십시오. ”기사 가능한 한 빨리 연락 드리겠습니다.

final finally와 finalize의 차이