라라벨 프로젝트에서 service 패턴을 추가하면서 DI 를 주입해라~ 같은 말을 읽게 됐다
뭔소린지 이해가 안갔다.. 그리고 생긴 것 도 이해가 안갔다..
헤매던 중 가장 이해가 잘 갔던 글을 소개한다
https://mangkyu.tistory.com/150
[Spring] 의존성 주입(Dependency Injection, DI)이란? 및 Spring이 의존성 주입을 지원하는 이유
1. 의존성 주입(Dependency Injection)의 개념과 필요성 [ 의존성 주입(Dependency Injection) 이란? ] Spring 프레임워크는 3가지 핵심 프로그래밍 모델을 지원하고 있는데, 그 중 하나가 의존성 주입(Dependency Inj
mangkyu.tistory.com
다만 여기는 spring 위주의 설명이라,, 아직 나도 100% 이해한 건 아니지만 대략적인 이해를 바탕으로 글을 작성해보려한다.
라라벨도 DI , IOC 를 지원한다!
1. DI(의존성 주입)이란?
- 의존성 주입(Dependency Injection, DI)은 객체가 다른 객체에 의존할 때,
이 의존 관계를 외부에서 주입하는 디자인 패턴이다.
객체는 직접 필요한 의존 객체를 생성하거나 참조하지 않고, 대신 외부에서 의존 객체를 제공받아 사용한다.
이를 통해 객체 사이의 결합도를 줄이고 코드의 재사용성, 유지보수성, 테스트 용이성을 높일 수 있다!
의존성 주입에는 세가지 방식으로 구현된다
(1) 생성자 주입(Constructor Injection) : 객체를 생성할 때 생성자를 통해 의존 객체를 주입하는 방식
(2) 메서드 주입(Method Injection) : 메서드의 매개변수를 통해 의존 객체를 주입하는 방식
(3) 프로퍼티 주입(Property Injection) : 객체의 프로퍼티에 직접 의존 객체를 할당하는 방식
생성자 주입이 가장 기본적인 편 !
2. IOC(제어의역전) 이란?
소프트웨어 디자인 패턴 중 하나로, 일반적으로 의존성 주입(Dependency Injection)과 함께 사용된다.
IOC는 제어 흐름의 방향을 변경하여 객체 간의 결합을 줄이고 유연성을 높이는 디자인 원칙이다.
IoC는 순수하게 제어권이 역전되어서 어플리케이션의 흐름을 프로그래머가 아니라 프레임워크가 결정하는 것을 말한다
일반적으로 프로그램은 자신이 실행되는 환경을 제어하고, 필요한 리소스를 생성하고 관리하지만,
IOC에서는 이러한 제어 흐름의 방향이 바뀐다!!! (이래서 제어의 역전?)
프로그램의 제어 흐름을 외부 컨테이너에 위임해서 외부에서 필요한 리소스를 받도록 한다.
이렇게 함으로서 객체 간의 결합을 낮추고, 유연하고 재사용가능한 코드를 작성할 수 있다.
=> DI는 IOC를 구현하는 하나의 방법이다. 보통 DI를 사용해서 IOC를 구현한다.
=> 제대로 된 객체지향 개발을 하려면, 객체간의 결합을 낮추고 유연한 코드를 작성하기 위해서 DI와 IOC를 함께 쓴다.
라라벨에서의 예제코드는 아래와같다.
아래 코드는 생성자 주입을 통해 DI 의존성 주입을 적용한 코드이다.
use App\Services\YourServiceInterface;
class YourController extends Controller
{
protected $yourService;
public function __construct(YourServiceInterface $yourService)
{
$this->yourService = $yourService;
}
public function yourMethod()
{
// $yourService를 사용하여 작업 수행
}
}
라라벨에서는 컨트롤러가 생성될 때 자동으로 생성자가 호출되는데, 이과정에서 의존성 주입이 이루어진다.
이를 통해 컨트롤러는 외부에서 주입된 서비스 객체를 사용할 수 있다.!
YourServiceInterface 인스턴스를 YourController 클래스 내에서 생성해서 해당 객체를 사용가능하게 개발하는 코드이다/
근데,, 무조건 좋다고 쓰기보다는 해당 객체가 재사용이 가능한 경우에만 할당해서 써주면 좋을 것 같다
그냥 무조건 DI 짱 하고 쓰면 나중에 뭔가 고칠일 이 있을 때 힘들어질것만 같이 생겼다
라라벨 프로젝트에서 service 패턴을 추가하면서 DI 를 주입해라~ 같은 말을 읽게 됐다
뭔소린지 이해가 안갔다.. 그리고 생긴 것 도 이해가 안갔다..
헤매던 중 가장 이해가 잘 갔던 글을 소개한다
https://mangkyu.tistory.com/150
[Spring] 의존성 주입(Dependency Injection, DI)이란? 및 Spring이 의존성 주입을 지원하는 이유
1. 의존성 주입(Dependency Injection)의 개념과 필요성 [ 의존성 주입(Dependency Injection) 이란? ] Spring 프레임워크는 3가지 핵심 프로그래밍 모델을 지원하고 있는데, 그 중 하나가 의존성 주입(Dependency Inj
mangkyu.tistory.com
다만 여기는 spring 위주의 설명이라,, 아직 나도 100% 이해한 건 아니지만 대략적인 이해를 바탕으로 글을 작성해보려한다.
라라벨도 DI , IOC 를 지원한다!
1. DI(의존성 주입)이란?
- 의존성 주입(Dependency Injection, DI)은 객체가 다른 객체에 의존할 때,
이 의존 관계를 외부에서 주입하는 디자인 패턴이다.
객체는 직접 필요한 의존 객체를 생성하거나 참조하지 않고, 대신 외부에서 의존 객체를 제공받아 사용한다.
이를 통해 객체 사이의 결합도를 줄이고 코드의 재사용성, 유지보수성, 테스트 용이성을 높일 수 있다!
의존성 주입에는 세가지 방식으로 구현된다
(1) 생성자 주입(Constructor Injection) : 객체를 생성할 때 생성자를 통해 의존 객체를 주입하는 방식
(2) 메서드 주입(Method Injection) : 메서드의 매개변수를 통해 의존 객체를 주입하는 방식
(3) 프로퍼티 주입(Property Injection) : 객체의 프로퍼티에 직접 의존 객체를 할당하는 방식
생성자 주입이 가장 기본적인 편 !
2. IOC(제어의역전) 이란?
소프트웨어 디자인 패턴 중 하나로, 일반적으로 의존성 주입(Dependency Injection)과 함께 사용된다.
IOC는 제어 흐름의 방향을 변경하여 객체 간의 결합을 줄이고 유연성을 높이는 디자인 원칙이다.
IoC는 순수하게 제어권이 역전되어서 어플리케이션의 흐름을 프로그래머가 아니라 프레임워크가 결정하는 것을 말한다
일반적으로 프로그램은 자신이 실행되는 환경을 제어하고, 필요한 리소스를 생성하고 관리하지만,
IOC에서는 이러한 제어 흐름의 방향이 바뀐다!!! (이래서 제어의 역전?)
프로그램의 제어 흐름을 외부 컨테이너에 위임해서 외부에서 필요한 리소스를 받도록 한다.
이렇게 함으로서 객체 간의 결합을 낮추고, 유연하고 재사용가능한 코드를 작성할 수 있다.
=> DI는 IOC를 구현하는 하나의 방법이다. 보통 DI를 사용해서 IOC를 구현한다.
=> 제대로 된 객체지향 개발을 하려면, 객체간의 결합을 낮추고 유연한 코드를 작성하기 위해서 DI와 IOC를 함께 쓴다.
라라벨에서의 예제코드는 아래와같다.
아래 코드는 생성자 주입을 통해 DI 의존성 주입을 적용한 코드이다.
use App\Services\YourServiceInterface;
class YourController extends Controller
{
protected $yourService;
public function __construct(YourServiceInterface $yourService)
{
$this->yourService = $yourService;
}
public function yourMethod()
{
// $yourService를 사용하여 작업 수행
}
}
라라벨에서는 컨트롤러가 생성될 때 자동으로 생성자가 호출되는데, 이과정에서 의존성 주입이 이루어진다.
이를 통해 컨트롤러는 외부에서 주입된 서비스 객체를 사용할 수 있다.!
YourServiceInterface 인스턴스를 YourController 클래스 내에서 생성해서 해당 객체를 사용가능하게 개발하는 코드이다/
근데,, 무조건 좋다고 쓰기보다는 해당 객체가 재사용이 가능한 경우에만 할당해서 써주면 좋을 것 같다
그냥 무조건 DI 짱 하고 쓰면 나중에 뭔가 고칠일 이 있을 때 힘들어질것만 같이 생겼다