본문 바로가기
개념

의존성(Dependency)과 의존성 주입(Dependency Injection) 간단하게 이해하기

by 오렌지마끼야또 2022. 9. 29.
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
반응형

댓글