결합도 (coupling)
제어결합 (control coupling)
보통결합 - 편의상 사용시작
모듈의 내부 논리 (예 : 플래그 및 스위치)에 영향을주는 데이터가 전달 될 때 모듈간에 제어 결합이 발생합니다
계층 구조에 전달 된 제어 플래그는 호출 프로그램이 호출 된 프로그램의 내부에 대해 알도록 요구합니다 (호출 된 프로그램은 블랙 박스가 아닙니다).
상위 계층으로 넘어온 제어 플래그는 하위 모듈이 상위 모듈의 제어 흐름에 영향을 미치도록합니다 (하위 모듈은 제어하지 않는 모듈에 영향을줍니다).
package com.github.sejoung.reactive.test;
public class Control {
private String run1(){
return "A";
}
private String run2(){
return "B";
}
private String run3(){
return "C";
}
public String process(int flag) throws Exception {
switch (flag){
case 1: return this.run1();
case 2: return this.run2();
case 3: return this.run2();
default: throw new Exception("invalid param");
}
}
}
package com.github.sejoung.reactive.test;
public class GoControl {
private Control control;
public GoControl(Control control){
this.control = control;
}
public String gogo() throws Exception {
return this.control.process(1);
}
public String gogosing() throws Exception {
return this.control.process(2);
}
}
package com.github.sejoung.reactive.test;
public class ControlTest {
public static void main(String[] args) throws Exception {
GoControl go = new GoControl(new Control());
System.out.println(go.gogo());
System.out.println(go.gogosing());
}
}
package com.github.sejoung.reactive.test;
public class GoControl2 {
private Control control;
public GoControl2(Control control){
this.control = control;
}
public String gogo(int i) throws Exception {
if("A".equals(this.control.process(i))){
return "A";
}else if("B".equals(this.control.process(i))){
return "B";
}else if("C".equals(this.control.process(i))){
return "C";
}else{
throw new Exception("에러닷");
}
}
}