반응형
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가 부모고, 그걸 구현한 구현체 클래스들이 있을 때
이를 클래스 업캐스팅처럼 업캐스팅하여 사용할 수 있다.
단 인터페이스에 선언된 함수들만 사용할 수 있겠다 당연히~!
참고
Interface 업캐스팅 (https://ga-you-ni.tistory.com/172)
반응형
'[SpringBoot]' 카테고리의 다른 글
SpringBoot 간단 실습 - 4 ORM과 JPA (0) | 2022.12.11 |
---|---|
RESTful 아키텍쳐 스타일 (0) | 2022.12.10 |
SpringBoot 간단 실습 - 3 Controller, RestClient 활용 (1) | 2022.12.10 |
SpringBoot 간단 실습 - 2 단위 테스트 (0) | 2022.12.09 |
@Autowired 의존성 주입이 안된다면 / NULL (0) | 2022.12.08 |