"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > \"Friend\" 종속성 선언을 리팩터링하는 방법: 과도한 상호 종속성을 제거하기 위한 단계별 가이드?

\"Friend\" 종속성 선언을 리팩터링하는 방법: 과도한 상호 종속성을 제거하기 위한 단계별 가이드?

2024년 11월 21일에 게시됨
검색:690

How to Refactor a \

"친구" 종속성 선언을 리팩토링하는 방법

배경

두 클래스 간의 "친구" 종속성을 제거하는 시나리오가 발생할 수 있습니다. 특히 과도한 상호 의존성, 유지 관리 문제 및 오래된 UML 표준에 대한 우려로 인해 더욱 그렇습니다.

1단계: 초록 소개 인터페이스

"friend" 클래스에 의해 노출된 메서드를 추출하고 새로운 추상 인터페이스를 만듭니다. "friend" 클래스에서 인터페이스로 종속 관계를 설정하고 다른 클래스에서 인터페이스로 "호출" 종속성을 설정합니다.

2단계: 작업을 인터페이스로 이동

작업 이동 종속 클래스에서 추상 인터페이스로의 "호출" 종속성을 구성합니다. 상속을 위해 인터페이스가 보호된 생성자를 확장하도록 만들고 종속 클래스와 인터페이스 간의 보호된 일반화 연관을 숨깁니다.

3단계: 함께 구현을 결합

마지막 단계에서 메서드를 만듭니다. "friend" 클래스에서 추상 인터페이스의 참조를 종속 클래스에 전달합니다. 필요한 연결을 설정하려면 초기화 중에 종속 클래스에서 이 메서드를 호출하세요.

구현

ClassA (공급자):

class ClassA : protected InternalInterface {
    public:
        attachAccessor(ClassAAccessor &accessor) {
            accessor.setInternalInterfaceRef(*this);
        }
};

ClassAAccessor (친구):

class ClassAAccessor {
    public:
        ClassAAccessor(ClassA& classA) : internalInterfaceRef(0) {
            classA.attachAccessor(*this);
        }
    private:  
        InternalInterface* internalInterfaceRef;
};

장점

  • 클래스 간의 불필요한 종속성을 제거합니다.
  • 최신 UML 표준을 준수합니다.
  • 내부 작업을 공개적으로 숨겨 액세스 제어를 시행합니다.

제한 사항

  • 코드가 증가할 수 있음 복잡성
  • 추상 인터페이스 필요, 성능 및 메모리 공간에 영향
  • 보호된 일반화 관계의 UML 표현이 어려울 수 있음
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3