본문 바로가기
[SpringBoot]

DI (Dependency Injection) 3가지

by Hevton 2022. 12. 10.
반응형

 

DI하는방법 3가지

 

1. RequiredArgContructor

2. Autowired

3. 생성자 정의

 

 

DI (Dependency Injection = 의존성 주입) 이란

new 연산자를 이용해 객체를 직접 생성하는 것이 아니라, 외부에서 객체의 타입을 지정하는 방법이다.

 

Hello h = new Hello(); 로 객체를 생성하면, h에는 당연히 Hello 객체만 들어가게 된다.

 

하지만 Hello의 부모 클래스나 인터페이스 중 Bow가 있다고 봤을 때,

Bow b를 선언해 놓으면, Bow의 하위클래스인 Hello나 기타 하위 클래스들의 객체들까지 b에 들어갈 수 있게 된다.

 

그러한 업캐스팅 장점을 이용하여, 코드의 간결함을 향상시키기 위한 과정이다.

외부에서 객체 타입을 지정해서 넣어줌으로써, 특정 객체타입에 매몰되지 않는 장점이 있다.

 

@Service
@RequiredArgsConstructor // DI 적용 방법 1에 관한 어노테이션
public class UserServiceLogic implements UserService {


//    DI 적용 방법 2
//    UserRepository를 구현한 구현클래스 UserRepositoryLogic을 찾아서 userRepositry 변수에 주입함.
//    @Autowired
//    private UserRepository userRepository;

//    DI 적용 방법 3
//    생성자 직접 구현
//    private UserRepository userRepository;
//
//    public UserServiceLogic(UserRepository userRepository) {
//        this.userRepository = userRepository;
//    }


    // DI 적용 방법 1
    // UserRepository를 구현한 구현클래스 UserRepositoryLogic을 찾아서 userRepositry 변수에 주입함.
    private final UserRepository userRepository; // @RequiredArgsConstructor와 세트
    
}

 

 

 

Interface implement 관련 실습 예제

interface Animal {

    void sound();
}

class Cow implements Animal {

    @Override
    public void sound() {
        System.out.println("MMo~");
    }
}

class Cat implements Animal {

    @Override
    public void sound() {
        System.out.println("Mew~");
    }
}

public class gson_example {

    public static void main(String args[]) {


        Animal animal1 = new Cow();

        Animal animal2 = new Cat();

        animal1.sound();
        animal2.sound();

    }
}



OUTPUT :

MMo~
Mew~

 

class extends랑 비슷한 메커니즘으로,

 

interface가 부모고, 그걸 구현한 구현체 클래스들이 있을 때

이를 클래스 업캐스팅처럼 업캐스팅하여 사용할 수 있다.

 

단 인터페이스에 선언된 함수들만 사용할 수 있겠다 당연히~!

 

 

 

참고

DI 란? (https://mimah.tistory.com/entry/Spring-%EC%9D%98%EC%A1%B4%EC%84%B1-%EC%A3%BC%EC%9E%85-Dependency-Injection-DI-%EC%98%88%EC%A0%9C)

 

Interface 업캐스팅 (https://ga-you-ni.tistory.com/172)

반응형