연결
각각의 컴포넌트가 다른 컴포넌트에 얼마나 의존하고 있는지를 가르킨다.
사이즈
클래스 메서드 그리고 메서드별 파라미터 수 등을 포함해서 컴포넌트 간에 연결된 수.
적은 수의 파라미터를 가진 하나의 메서드는 자신을 호출하는 컴포넌트와 좀 더 느슨하게 연결 되어있다.
가시성
컴포넌트 간의 연결의 중요성. 전역 변수를 변경하는 것은 가시성이 낮다.
친밀성
컴포넌트 간의 직접적인 연결. A가 B와 연결되고 B가 C와 연결되어 있을 때,
A는 C와 간접적으로 연결된다. 한 클래스가 다른 클래스에서 파생 됐다는 것은
그 클래스를 멤버 변수로 포함하는 것보다 더 단단히 연결시키는 것이다.
유연성
컴포넌트 간의 쉬운 변경.
결합
하나의 컴포넌트에 있는 다양한 함수들이 얼마나 논리정연한지 혹은
강하게 연관되어 있는지를 가리킨다.
이름만을 사용한 연결
만약 클래스 A가 클래스 B의 이름만 필요할 뿐, 클래스B의 어떤 메서드도 호출할 필요 없다면,
클래스 B를 전방 선언으로 사용한다.
class MyObject;
class MyObjectHolder
{
public :
MyObjectHolder();
void SetObject(MyObject *obj);
MyObject *GetObject() const;
private :
MyObject *mObj;
}
클래스 연결 줄이기
class MyObject
{
public:
void PrintName() const;
std::string GetName() const;
protected:
...
private:
std::string mName;
}
class MyObject
{
public:
std::string GetName() const;
protected:
...
private:
std::string mName;
}
void PrintName(const MyObject &obj);