답변:
나쁘지 않은 냄새. 이것이 필요할 수 있습니다. 왜 이것이 잘못되었다고 생각하십니까? 원자 수준의 방법은 작업을 수행하는 독립 엔터티입니다. 작업을 수행하는 한 액세스 권한이있는 사람은 누구나 작업을 수행하기 위해 호출 할 수 있습니다.
코드 냄새? 그렇습니다. 정말 나쁘지는 않지만 수업에 너무 많은 책임이 있다는 좋은 지표입니다.
클래스를 다른 객체로 나눌 필요가 있다는 표시로 사용하십시오. 개인 메소드는 실제로 깨끗한 OO 디자인에서 동일한 객체의 공용 메소드를 호출 할 필요가 없습니다.
물론 일단 클래스를 검사하고 메소드 호출의 이유가 명확 해지면, 그 클래스를위한 유틸리티 메소드가 사적인 것이지만 일반적으로 클래스에 대한 유틸리티 메소드가 유용 할 것입니다. 다른 방법으로 공개되고 활용되기 때문에 일반적으로 이러한 방법도 공개 될 것으로 기대합니다.
모든 코드 냄새와 마찬가지로, 이는 추가 코드 검사, 합리화 및 리팩토링에 대한 동기이지만 경보의 원인은 아닙니다.
이 클래스의 소스 코드를 읽지 않은 사람이 서브 클래스를 만들려고 시도하고 public 메소드를 재정의하면 불쾌한 놀라움이 발생할 수 있습니다. 그것이 진짜 관심사인지는 분명히 당신의 상황에 달려 있습니다. 아마도 당신은 공개적인 방법이나 수업의 최종 결정을 고려해야합니다.
아니요.이 경우 다른 조치를 취해야합니까? 비공개 메소드를 공개 또는 공개 메소드로 설정 하시겠습니까? 공개 메소드에서 개인 메소드로 코드를 복사하여 붙여 넣습니까?
나는 이것이 오래된 게시물이라는 것을 알고 있지만, 나는 직장에서 토론하고있는 것입니다. 나는 이것을 코드 냄새라고 생각하고 왜 당신이 이것을하고 싶어하는지 이해할 수 없다. 개인 메소드가 공개 메소드를 호출해야하는 경우, 공개 메소드의 컨텐츠를 개인 메소드로 가져 와서 두 메소드가 모두 호출 할 수 있어야합니다. 왜?
공개 메소드에는 내부에서 코드를 실행 한 후 필요하지 않은 테스트가 포함될 수 있습니다. 예를 들어 UserObj를 수신하고 사용자 권한을 테스트하려고 할 수 있습니다.
공개 호출 후 스레딩을 사용하는 경우 객체를 잠그는 요구 사항이있을 수 있으므로 내부적으로 공개 메소드를 다시 호출하고 싶지 않습니다.
내 의견으로는 순환 오류와 무한 루프 및 mem out 예외가 발생할 가능성이 큽니다.
평범하고 간단하게 나쁜 디자인과 "게으른". 공개 방법은 외부 세계에 대한 액세스를 제공합니다. 이미 안에있을 때 밖으로 걸어 갈 이유가 없습니다.
내 코드에서 종종 게으른로드 게터를 생성합니다. 즉, 처음 요청했을 때 객체가 초기화되고 이후에 동일한 인스턴스화 된 객체를 재사용합니다. 그러나 지연로드를 사용하여 인스턴스화 된 오브젝트는 특정 지점에서 반드시 인스턴스화 될 필요는 없음을 의미합니다. 객체가 이미 인스턴스화되었거나 다른 메소드 내에서 동일한 지연로드 코드를 반복한다는 것을 알기 위해 호출 시퀀스 주위에 내 머리를 감싸기보다는 객체가 필요할 때마다 지연 로더를 호출합니다.
현명한 방법으로 공용 메소드를 사용할 수있는 것처럼 잘못 사용할 수도 있습니다. 예를 들어 다른 개인용 메서드를 호출하기 전에 매개 변수를 처리하는 공용 메서드가 있습니다. 동일한 매개 변수를 가지고 있기 때문에 단순히 공개 메소드를 자연스럽게 호출하는 것은 실수입니다. 실수는 미묘하지만 다른 무엇보다 설계 오류이므로 공용 메소드의 매개 변수가 아닌 내부 메소드의 매개 변수로 관리하는 법을 배워야합니다.
따라서 귀하의 질문에 대답하기 위해 올바르게 사용하면 나쁜 코드가 아닙니다.