티스토리 뷰

정리하기/개발 기본

의존성 주입 (DI)

내가송 2024. 1. 18. 18:40
반응형

의존성 주입(Dependency Injection) 을 이해하기 위해서는 각각의 단어를 이해해야한다.

 

의존성 (Dependency)

객체 A 가 객체 B 에 의존하고 있는 경우 객체 A 는 객체 B 에 의존하고 있다고 표현한다. 

class Engine {
	String engineName; 
    
	public Engine(String name) {
    	this.engineName = name;
    }
}

class Car {
	Engine engine; 
    
    public Car() {
    	this.engine = new Engine();
    }
}

 

위의 예시 코드를 보면 Car 생성자 메소드가 호출할 때 Engine 타입의 객체를 생성하고 있어, 

Car 클래스가 Engine 클래스에 의존성을 갖고 있다고 이야기하는 상황인거다. 

 

의존성 이라는 것이 객체 사이의 관계를 의미하는 것이라면 주입은 어떤 것일까? 

 

주입(Injection) 

주입은 객체를 생성하여 제공하는 과정을 의미한다. 

 

그러면 생성한 객체를 제공하는 방식은 어떻게 될까? 

생성자 주입 (Constructor Injection) 

생성자 메소드에 객체를 파라미터로 전달하여 제공하는 방식이다. 

 

class Car {
	Engine engine; 
    
    public Car(Engine engine) {
    	this.engine = engine;
    }
}

public class Main {
    public static void main(String[] args) {
        // Engine 객체 생성
        Engine engine = new Engine("Engine 1");

        // Car 객체 생성시 Engine 객체를 주입
        Car car = new Car(engine);
    }
}

 

 

Setter 주입 (Setter Injection)

 객체 생성 후 setter 메소드를 통해 객체를 전달하는 방식 

class Car {
	Engine engine; 
    
    public Car() {
    }
    
    public void setEngine(Engine engine) {
    	this.engine = engine;
    }
}

public class Main {
    public static void main(String[] args) {
        // Engine 객체 생성
        Engine engine = new Engine("Engine 1");

        Car car = new Car();
        car.setEngine(engine);
    }
}

 

필드 주입 (Field Injection)

필드에 직접 객체를 전달하는 방식으로 프레임워크에서 리플렉션을 사용하여 클래스의 필드에 직접 전달하는 방식 

스프링 프레임워크 기반의 프로젝트의 경우 @Autowired 어노테이션을 통해 객체를 전달할 수 있다. 

 

public class Car {
	@Autowired
	Engine engine;
    
    public Car() {
    }
}
반응형

'정리하기 > 개발 기본' 카테고리의 다른 글

직렬화  (0) 2024.01.17
ACL  (0) 2018.08.10
CDN 서버  (0) 2017.12.18
컴파일 vs 빌드  (0) 2017.07.23
숫자 표현 방식  (0) 2017.06.26
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함