결합도_(control coupling)

결합도 (coupling)

제어결합 (control coupling)

보통결합 - 편의상 사용시작

모듈의 내부 논리 (예 : 플래그 및 스위치)에 영향을주는 데이터가 전달 될 때 모듈간에 제어 결합이 발생합니다

계층 구조에 전달 된 제어 플래그는 호출 프로그램이 호출 된 프로그램의 내부에 대해 알도록 요구합니다
(호출 된 프로그램은 블랙 박스가 아닙니다).

상위 계층으로 넘어온 제어 플래그는 하위 모듈이 상위 모듈의 제어 흐름에 영향을 미치도록합니다
(하위 모듈은 제어하지 않는 모듈에 영향을줍니다).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

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");
}
}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

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);
}
}

1
2
3
4
5
6
7
8
9
10
11

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());
}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

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("에러닷");
}
}

}