Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Problems occurred while performing provisioning operation
- windows apache wsgi 에러
- django The requested operation has failed!
- django settings.py
- 2961 도영이가 만든 맛있는 음식
- 2661 java
- 2661 좋은 수열
- django
- 14711 타일 뒤집기
- 2643 색종이 올려 놓기
- 원격 연결 포트 포워딩
- apache pythonpath
- 18233 러버덕
- 14711 java
- windows 원격 연결 설정
- java di
- django windows 배포 에러
- django 프로젝트 시작
- 18233 비트마스킹
- 1188 java
- 공유기 원격 설정
- 2961 java
- django apache deploy error
- APPEND_SLASH = FALSE
- 1188 음식 평론가
- 18233 java
- django 웹 페이지
- django httpd error
- 2643 java
- The requested operation has failed!
Archives
라이브러리는 도서관 아닌가요
DI 1 - 의존성 발생 지점은 new 본문
가정: 노트북(클래스)에 키보드(클래스)를 연결한다고 하자.
의존성을 중심으로 나머지 코드는 무시하고 색이 칠해진 부분만 유심히 보면 된다.
* 에디터를 사용하지 않아서 코드에 오타가 있을 수 있습니다.
interface Keyboard{
String getKeyboardBrand();
}
public class KoreaKeyboard implements Keyboard{
public String getKeyboardBrand(){
return = "한국산 키보드";
}
}
public class AmericaKeyboard implements Keyboard{
public String getKeyboardBrand(){
return = "미국산 키보드";
}
}
public class Laptop{
Keyboard keyboard;
public Laptop(){
keyboard = new KoreaKeyboard(); // 클래스 내부에 직접 속성 주입
}
public String showInputBrand(){
return "연결된 키보드= " + keyboard.getKeyboardBrand();
}
}
해당 클래스가 클래스 로더에 의해 로드되고,
위의 new 부분에 의존성이 생긴다.
1. 순수 자바로 의존성 주입 - 생성자 사용
: 생성자의 파라미터로 받는다.
interface Keyboard{
String getKeyboardBrand();
}
public class KoreaKeyboard implements Keyboard{
public String getKeyboardBrand(){
return = "한국산 키보드";
}
}
public class AmericaKeyboard implements Keyboard{
public String getKeyboardBrand(){
return = "미국산 키보드";
}
}
public class Laptop{
Keyboard keyboard;
public Laptop(Keyboard keyboard){
this.keyboard = keyboard; // 생성자 인자로 받아 객체 주입
}
public String showInputBrand(){
return "연결된 키보드= " + keyboard.getKeyboardBrand();
}
}
public class Main{
public static void main(String[] args){
Keyboard aKeyboard = new KoreaKeyboard(); // 의존성 발생시키는 부분이 Laptop에서 Main으로 이동
// Keyboard aKeyboard = new AmericaKeyboard();
Laptop aLaptop = new Laptop(aKeyboard); // 주입
System.out.println(aLaptop.showInputBrand()); // "연결된 키보드= 한국산 키보드"
}
}
2. 순수 자바로 의존성 주입 - 설정자 메서드 setter 사용
: 속성 설정자 메서드를 사용한다. (setter)
interface Keyboard(){
String getKeyboardBrand();
}
public class KoreaKeyboard implements Keyboard{
public String getKeyboardBrand(){
return = "한국산 키보드";
}
}
public class AmericaKeyboard implements Keyboard{
public String getKeyboardBrand(){
return = "미국산 키보드";
}
}
public class Laptop{
Keyboard keyboard;
public Keyboard getKeyboard(){
return keyboard;
}
public void setKeyboard(Keyboard keyboard){
this.keyboard = keyboard;
}
public String showInputBrand(){
return "연결된 키보드= " + keyboard.getKeyboardBrand();
}
}
→ 생성자가 사라지고, keyboard 속성에 대한 접근자 및 설정자 메서드가 생겼다. 보다 자바스러운 코드.
public class Main{
public static void main(String[] args){
Keyboard aKeyboard = new KoreaKeyboard();
// Keyboard aKeyboard = new AmericaKeyboard();
Laptop aLaptop = new Laptop();
aLaptop.setKeyboard(aKeyboard); // 주입
System.out.println(aLaptop.showInputBrand()); // "연결된 키보드= 한국산 키보드"
}
}
'Java > DI' 카테고리의 다른 글
DI 5 - @Resources @Autowired 차이 (0) | 2021.12.17 |
---|---|
DI 4 - @Qualifier("")를 사용해 @Autowired id 설정 (0) | 2021.12.17 |
DI 3 - Annotation을 사용한 Spring 의존성 주입 @Autowired (0) | 2021.12.17 |
DI 2 - xml 파일로 Spring DI 지시서 작성 (0) | 2021.12.14 |
Comments