728x90
JAVA 일반적인 구현
|
1
2
3
4
5
6
7
8
9
10
|
class ShotGun{
void fire() { ... }
}
class Game{
public gameRun() {
ShotGun sg = new ShotGun();
sg.fire();
}
}
|
cs |
프로그램에서 객체를 직접 생성하기 때문에 클래스 간 종속성이 발생하는 문제가 있음.
팩토리 패턴 구현
|
1
2
3
4
5
6
|
class Game{
public gameRun() {
ShotGun sg = Factory.getInstance();
sg.fire();
}
}
|
cs |
객체 생성을 하지 않고 팩토리 패턴으로 필요한 인스턴스를 얻어오는 구조.
어떤 ShotGun의 인스턴스가 전달될지 알 필요가 없다.
변화가 필요한 경우 게임 자체를 수정하는 것이 아니라 Factory 객체의 변화를 수정하면 됨.
객체 생성은 캡슐화되지만 팩토리에 의존성이 생기고 필요에 따라 특정 객체를 요구하는 등에 대해서는 별도 구현이 필요
DI 구현
|
1
2
3
4
5
6
7
8
9
10
|
class Game{
private Shotgun sg;
public void setShotGun(ShotGun sg) {
this.sg = sg;
}
public gameRun() {
sg.fire();
}
}
|
cs |
setter 메서드를 통해 필요한 객체가 외부에서 초기화되는 방식이다.
Game 클래스 외부에서 setShotGun() 메서드를 호출하고 필요한 ShotGun 인스턴스를 공급한다.
Game 클래스에서는 필요시 제공된 인스턴스를 사용하기만 하면 된다.
외부에서 ShotGun 객체를 제공하는 메커니즘은 별도로 구현해야 한다.
스프링 프레임워크 구현
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
@Component
class ShotGun{
void fire() { ... }
}
class Game{
@Autowired
private Shotgun sg;
public gameRun() {
sg.fire();
}
}
|
cs |
ShotGun 클래스에 @Component 어노테이션을 붙여 스프링 컨테이너가 해당 클래스의 인스턴스를 생성할 수 있도록 한다.(IOC)
@Autowired는 생성된 해당 클래스 타입 객체의 인스턴스를 연결한다.
'Spring' 카테고리의 다른 글
| [Error] - the annotation @value is disallowed for this location. the attribute value is undefined for the annotation. (0) | 2024.04.01 |
|---|---|
| [Error] - java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for (0) | 2024.03.29 |
| [Spring] - 직렬화를 하는 이유(implements Serializable) (0) | 2024.03.13 |
| [Spring] 스프링 빈 (0) | 2024.02.22 |
| [Spring] 스프링 프레임워크 (0) | 2024.02.21 |