2014-04-28 2 views
0

아래의 설명은 내 작은 스 니펫입니다. 여기에는 두 개의 클래스 MathSolveEquation이 있습니다. 둘 다 서로 의지합니다. 그것은 전통적인 관행인가? 또는 모든 비용을 들이지 않아야하는 반 패턴이 있습니까?클래스 간 의존성이 반 패턴입니까

참고 : 다른 해결책은 삼가하십시오. 이 예는 제가 가진 의심에 대답하기 위해 만들어졌습니다. 감사.

예는 :

class SolveEquation { 
    public static int solveEquation(int x, int y) { 
     return Math.add(x, y) + Math.sub(x, y); 
    } 
} 


class Math { 
    public static int solveEquation(int x, int y) { 
     return SolveEquation.solveEquation(x, y); 
    } 

    public static int add(int x, int y) { 
     return x + y; 
    } 

    public static int sub(int x, int y) { 
     return x - y; 
    } 
} 
+0

http://en.wikipedia.org/wiki/Circular_dependency –

답변

4

이 상황은 순환 종속성라고, 그래 당신은 그것을 피해야한다. 적어도 피할 수 있다는 것을 알고 있다면 해보십시오.

편집 : 피해야하는 이유는 많이 있습니다.

첫 번째 언어는 일부 언어입니다 (C#에서 이미 저에게 일어난 일을 기억하면). 순환 종속성이있는 모듈을 빌드 할 수 없습니다. (우))

둘째는 코드 품질이 향상 될 수 있다는 것입니다. 왜? 왜냐하면 일반적으로 코드의 결합이 느려지므로 코드 재사용이 적어지기 때문입니다.

또한 예에서 정적 메서드를 사용했기 때문에이 경우가 아니라 해당 개체를 만들 때 어려울 수 있습니다. 특히 의존성 주입을 사용하는 경우.

더 많은 이유는 here

순환 종속성이 소프트웨어 프로그램 원치 않는 효과를 일으킬 수 있습니다 나열되어 있습니다. 소프트웨어 설계의 관점에서 가장 문제가되는 것은 상호 의존적 인 모듈끼리 단단히 결합하여 을 줄이면 단일 모듈을 별도로 재사용 할 수 없게됩니다.

하나의 모듈에서 작은 로컬 변경 사항이 다른 모듈로 확산되고 원치 않는 전역 효과 (프로그램 오류, 컴파일 오류)가 발생하면 순환 종속성으로 인해 도미노 효과가 발생할 수 있습니다. 순환 종속성 또한 무한 재귀 또는 기타 예기치 않은 오류가 발생할 수 있습니다.

순환 의존성은 사용하지 않는 개체의 할당을 해제하는 특정 원시 기본 자동 가비지 수집기 ( 참조 횟수)를 방지하여 메모리 누수가 발생할 수도 있습니다.

+0

@DavidWallace 편집을 참조하십시오. – Pacane

+1

마지막 절 - 메모리 누수에 관한 -은 Java와 실제로 관련이 없습니다. 또한 모듈을 구축 할 수 없다는 점도 조금도 아닙니다. –

+0

당신이 옳을 수도 있습니다. 나는 아직도 순환 의존성을 좋아하지 않는다. : P 나는 또한 잘 상세한 대답을 발견했다. 어쩌면 유용 할 수 있습니다. http://stackoverflow.com/a/1948636/505810 – Pacane