728x90
반응형
참고 사이트
https://velog.io/@ellyheetov/Dependency-Injection
● 간단하게 의존성(Dependency) 이해하기
A클래스와 B클래스가 있다고 할 때
A 내부에서 B를 사용한다면
A가 B의 무언가를 사용(호출)한다 == A가 B에게 의존한다
ex)
public class Main {
public static void main(String[] args) {
Car car = new Car();
car.run(); // run!!!!
}
}
class Car {
Engine engine;
Car() {
engine = new Engine();
}
void run() {
engine.run();
}
}
class Engine {
void run(){
System.out.println("run!!!!");
}
}
A 는 자동차 class, B는 엔진 class 이고 B 엔진 클래스에는 run() 함수가 있다고 했을 때
A 클래스 내부에 B클래스의 인스턴스를 만들고 B.run()을 호출한다.
A(자동차) 는 B(엔진)가 있어야만 본인의 역할을 다 할 수 있다.
쉽게 말하면 뭐가 됐든 A에서 B를 호출하는 모양이면
의존관계에 있다~ 고 보면 편하다.
이렇게 한 클래스 내부에서 인스턴스를 직접 생성하는 경우는 강한 결합이다.
● 간단하게 의존성 주입(Dependency Injection) 이해하기
public class Main {
public static void main(String[] args) {
Engine engine = new Engine();
Car car = new Car(engine); // 의존성 주입
car.run(); // run!!!!
}
}
class Car {
Engine engine;
Car(Engine e) {
this.engine = e;
}
void run() {
engine.run();
}
}
class Engine {
void run(){
System.out.println("run!!!!");
}
}
A 클래스(자동차) 안에서 B 클래스 인스턴스(엔진)를 만들지 않고
B 인스턴스 먼저 만들고
그걸 A 인스턴스 만들때 매게변수로 넣어주는 것.
그냥 필요한 것을 파라미터로 넣어주는 걸 의존성 주입이라고 생각하면 편하다.
A는 여전히 B에 의존하고 있지만 클래스 내부에서 인스턴스를 직접 생성하지 않고 의존성을 주입받음로써 약한 결합이 되었다.
728x90
반응형
'개념' 카테고리의 다른 글
REST란? REST가 뭔데? (0) | 2024.01.05 |
---|---|
온프레미스(On-premise)와 클라우드 (0) | 2022.09.20 |
Apache, Nginx, Tomcat, 웹서버, WAS, 정적컨텐츠, 동적컨텐츠 (0) | 2022.09.19 |
C언어, 컴파일, 동적 컴파일, 정적 컴파일, 동적 라이브러리, 정적 라이브러리 (0) | 2021.03.29 |
댓글