미안하지만 메신저는 다른 대부분의 '그렇습니다'라는 대답에 동의하지 않고 다음과 같이 말합니다.
하나의 공개 메소드를 다른 메소드에서 호출하는 클래스를 권장하지 않습니다.
이 연습에는 몇 가지 잠재적 인 문제가 있습니다.
1 : 상속 된 클래스의 무한 루프
따라서 기본 클래스는 method2에서 method1을 호출하지만 사용자 또는 다른 누군가가 상속하거나 method2를 호출하는 새로운 메소드로 method1을 숨 깁니다.
2 : 이벤트, 로깅 등
예를 들어 '1 added!'이벤트를 발생시키는 Add1 메소드가 있습니다. 아마도 Add10 메소드가 해당 이벤트를 발생시키고 로그에 쓰거나 10 번 쓰는 것을 원하지 않을 것입니다.
3 : 스레딩 및 기타 교착 상태
예를 들어 InsertComplexData는 DB 연결을 열고 트랜잭션을 시작하고 테이블을 잠근 다음 InsertSimpleData를 호출하고 연결을 열고 트랜잭션을 시작하며 테이블이 잠금 해제 될 때까지 기다립니다 ....
더 많은 이유가 있다고 확신합니다. 다른 대답 중 하나가 '방법 1을 편집하고 방법 2가 다르게 동작하기 시작하는 것에 놀랐습니다.'
일반적으로 코드를 공유하는 두 개의 공개 메소드가있는 경우 둘 다 호출하지 않고 개인 메소드를 호출하는 것이 좋습니다.
편집하다 ----
OP의 특정 사례를 확장 할 수 있습니다.
우리는 많은 세부 사항을 가지고 있지 않지만 ReverseData는 ScheduleTransmission 메소드뿐만 아니라 어떤 종류의 이벤트 핸들러에 의해 호출된다는 것을 알고 있습니다.
역 데이터가 객체의 내부 상태를 변경한다고 가정합니다.
이 경우에는 스레드 안전이 중요하므로 실습에 대한 세 번째 이의가 적용됩니다.
ReverseData 스레드를 안전하게하기 위해 잠금을 추가 할 수 있습니다. 그러나 ScheduleTransmission도 스레드로부터 안전해야하는 경우 동일한 잠금을 공유해야합니다.
이 작업을 수행하는 가장 쉬운 방법은 ReverseData 코드를 개인용 메서드로 옮기고 두 개의 공용 메서드에서 호출하는 것입니다. 그런 다음 공개 메소드에 잠금 문을 넣고 잠금 오브젝트를 공유 할 수 있습니다.
분명히 "그렇지 않을 것입니다!" 또는 "자물쇠를 다른 방법으로 프로그래밍 할 수 있습니다."그러나 좋은 코딩 방법에 대한 요점은 먼저 코드를 잘 구성하는 것입니다.
학문적으로 나는 이것이 L을 확실하게 위반한다고 말할 것입니다. 공개 방법은 공개적으로 접근 할 수있는 것 이상입니다. 또한 상속자에 의해 수정 될 수도 있습니다. 수정을 위해 코드를 닫아야합니다. 즉, 공개 및 보호 된 메소드에서 수행하는 작업에 대해 생각해야합니다.
여기 또 하나 : 당신은 또한 잠재적으로 DDD를 위반합니다. 오브젝트가 도메인 오브젝트 인 경우 공용 메소드는 비즈니스에 의미가있는 도메인 용어 여야합니다. 이 경우 '수십 개의 계란을 사다'는 방식으로 시작하더라도 '1 개의 계란을 12 번 사다'와 동일하지는 않습니다.