안녕하세요 선생님. 결합도 문제 풀이 중, 자료 결합과 제어 결합에서 헷갈리는 부분이 있어서 질문드립니다.
1. 문제의 A()함수와 B(x)함수 사이에는 자료 결합은 존재하지 않는 건가요?
2. 제가 임의로 B(x) 함수를 수정해 보았는데 이렇게 될 경우 A()함수와 B(x)함수 사이에 자료 결합이 존재하는 게 맞을까요?
(+ 내용 결합이 존재하는 게 맞다면, 선생님께서 이론강의에서 설명한 자료 결합과 제어결합이 모두 존재하는데 더 나쁜 결합이 정답이 된다. << 에 부합하는 건지도 궁금합니다.)
사실 처음엔 A함수와 B함수 사이에 자료 결합(수정하겠습니다! 자료결합이요 ㅜㅜ)만 성립한다 생각하였고 잘 이해가 가지 않아 여러 해설을 찾아보았거든요.
그런데 유튜브에 올라온 해설강의엔 B함수에 if문이 존재하기 때문에 제어 결합이고 if문이 존재하지 않았으면 자료 결합이라고 하더라구요.
아무리 생각해도 옳지 않은 해설 같아 개념 정립을 확실하게 하고 싶어서 질문 드립니다 ㅜㅜ...
많이 어렵네요.
매번 상세한 답변 감사드립니다.
첫댓글
1.
내용결합은 직접 참조하는 것이고
직접 참조하는 것이 없으므로 내용결합은 없습니다.
선생님 죄송합니다! 질문 다시 한번만 확인 부탁드려도 될까요?. 제가 착각을 해서 내용결합을 자료결합이라고 생각해서 용어를 혼용했어요 ㅜㅜ!
2.
그렇게 수정해도 내용결합은 아닙니다.
직접 참조하는 것이 아니므로
내용결합은 어셈블리어 같은 저급언어에서 발생할 수 있습니다.
1. 다시 설명
주어진 코드는 본인이 생각하는 것처럼 자료결합과 제어결합이 존재합니다.
이런 경우는 결합도가 더 나쁜 제어결합을 정답으로 해야 합니다.
이 부분은 제가 강의에서 많이 강조한 것입니다.
그리고
if문이 존재하기 때문에 제어결합이고
if문이 존재하지 않았으면 자료결합이다.
는 올바른 설명이 아닙니다.
예를들면, max에 if가 있지만 제어결합이 아니고, 자료결합입니다.
void call(int x, int y)
{
int maxVal = max(x, y); //C 언어에서 인수전달은 call by value 방식(자료결합도)
printf("%d\n", maxVal);
}
int max(int a, int b) //함수 max는 두 정수를 입력받아 큰 값을 반환(기능적 응집도)
{
if (a > b) return a;
else return b;
}