본문 바로가기
Spring|Spring-boot

[Spring] 느슨한 결합력과 인터페이스

by oncerun 2020. 6. 15.
반응형

느슨한 결합력과 인터페이스의 역할

 

코드 수정을 없애고 DI를 위한 설정

 

만약 우리가 Data를 받아오는 Dao에서 로직이 변경됐다고 했을 경우 어떻게 클래스를 변경해야 할까?

변경된 코드를 덮어써야 할까? 덮어쓰게된다면 Service함수에서 영향을 받아 수정 범위가 늘어나지 않을까?

private B1 b = new B1();
b.getData();

private B2 b = new B2();
b.getData();

service에서 B1클래스로 구현되어있는 상황에 B2로 변경한다는 것은 결합력이 높은 편입니다.

어떤 식으로 변경해야 결합력을 낮출 수 있을까요?

 

private B b = new B1();
b.getData();

private B b = new B2();
b.getData();

바로 인터페이스입니다.  service함수에서 b라는 인터페이스를 사용하며

구현하고 있는 dao를 주입하는 것이 올바른 방법일 수 있습니다.

 

그럼 또 다른 문제가 있습니다. 형식은 인터페이스로 하되 실질적인 객체인 B1을 B2로 변경해야 하는 일이 남아있습니다.

 결국 소스코드 없이 바꿀 수 있도록 하기 위해 코드를 생성한 객체를 외부 파일 외부 설정에 두고 외부에 의해 설정될 수 있도록 하는 것입니다.

 

설정 파일이라 하면 XML , 어노테이션인 두 가지를 자주 사용합니다. 설정 파일에 변경될 클래스의 정보가 있으며

그것을 읽어서 바로 service에 넣게 됩니다.

Class clazz = Class.forName(외부에서읽은 클래스);
B b = (B) clazz.newInstance();
service.setB(b);

 

반응형

'Spring|Spring-boot' 카테고리의 다른 글

[spring] @Configuration  (0) 2020.06.17
[Spring] Dependency Injection (xml)  (0) 2020.06.16
[Spring] IoC 컨테이너  (0) 2020.06.15
[Spring] DI(Dependency Injection)  (0) 2020.06.15
[Spring] 소개  (0) 2020.06.15

댓글