개발/Spring

Spring Framework_결합도(Coupling)

onivv 2024. 7. 16. 14:18
반응형

[ 결합도 - 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

버전 1
버전 2

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

 

 

 

반응형