반응형
[ 결합도 - Coupling ]
: 모듈 간의 상호 의존성을 나타내는 개념
- 높은 결합도는 한 요소의 변경이 다른 요소에 미치는 영향이 크다는 것을 의미, 유지보수 불리
- 따라서 낮은 결합도가 유지보수성을 향상시키는데 도움을 줌!
- 결합도를 낮추기 위한 방법 ↓
1. 인터페이스 활용 : DTO
: 객체가 변경되어도, 메서드를 추가 변경하지 않아도됨 > 다형성 구현!
Interface - Phone.java

Class - IPhone.java , GalaxyPhone.java

2. 팩토리 패턴 활용 : HandlerMapping
: 코드에 new가 있었는데, new가 없어짐 >>> 코드에 new가 없을수록 결합도가 낮음
- Spring 컨테이너 코드에 BeanFactory 타입은 무조건 있음
- 원래 객체를 받아오려면 new 했지만, 이제는 BeanFactory가 Object를 리턴해줌 (Casting 해주기)
- 즉 팩토리 패턴을 사용하면 객체 생성에 대한 의존성을 낮출 수 있고, 객체 생성 방식이 변경되더라도 다른 부분에 영향을 덜 주고받을 수 있음
Class - BeanFactory.java
package test;
import java.util.ArrayList;
public class BeanFactory {
// [ver3] 데이터가 있니없니?
// Bean == 객체 == 기능 단위
// 기능 단위로 코드를 작성해놓은 객체
private ArrayList<String> iDatas;
private ArrayList<String> gDatas;
// 생성자
public BeanFactory() {
iDatas = new ArrayList<String>();
iDatas.add("IPHONE");
iDatas.add("APPLE");
gDatas = new ArrayList<String>();
gDatas.add("GALAXY");
gDatas.add("SAMSUNG");
}
// 사용자가 접근하는 서비스가 아니니까 public이 아닌 private, 내부에서만 사용하는 로직
private boolean isIPHONE(String phoneName) {
// ArrayList<String> datas = new ArrayList<String>();
// datas.add("IPHONE");
// datas.add("APPLE");
for(String data:iDatas) {
if(phoneName.equals(data)) {
return true;
}
}
return false;
}
private boolean isGALAXY(String phoneName) {
// ArrayList<String> datas = new ArrayList<String>();
// datas.add("GALAXY");
// datas.add("SAMSUNG");
for(String data:gDatas) {
if(phoneName.equals(data)) {
return true;
}
}
return false;
}
// 모든 bean류라서 Object, Object == 자바의 최상위클래스
public Object getBean(String beanName) {
beanName = beanName.toUpperCase();
if(isIPHONE(beanName)) {
return new IPhone();
}
else if(isGALAXY(beanName)) {
return new GalaxyPhone();
}
return null;
}
}
Class - User.java
반응형
'개발 > Spring' 카테고리의 다른 글
Spring Framework_컨테이너 & 빈 관리 (0) | 2024.07.16 |
---|---|
Spring Framework_의존성 주입(Dependency Injection, DI) (1) | 2024.07.16 |
Spring Framework_설치 (0) | 2024.07.16 |
Spring Framework_ApplicationContext, <bean></bean> (2) | 2024.07.16 |
Spring Framework_개념 (0) | 2024.07.16 |