Java에서 개인 도우미가 공개 메소드보다 위 또는 아래로 가야합니까? [닫은]


24

동료와 Java 클래스의 메소드 순서에 대한 반대 관행이 있음을 알았습니다. 우리 중 한 사람은 주요한 공개 방법으로 수업을 시작한 다음 모든 개인 도우미를 나중에 배치합니다. 우리 중 다른 사람은 공개 방법이 맨 끝에 있는지 확인합니다.

분명히 이것은 스타일 문제 일 뿐이며 정답은 없습니다. 그러나 우리 가이 문제가 또 다른 Yooks vs Zooks와 싸우고 임의로 하나를 선택하기로 결정하기 전에 표준 Java 스타일 가이드 권장 사항이 있거나 한 가지 접근법이 다른 접근법보다 나은 실용적인 이유가 있는지 궁금합니다.


13
중요하지 않습니다. 동전을 뒤집다. 하나를 선택. 그것에 충실하십시오.


@KilianFoth-이 질문은 3 개월 전에 요청되었으며 추가 답변이 있습니다. 문제의 질문이이 질문과 중복되지 않습니까?
Brandon Yarbrough

답변:


25

일반적으로 선호도가 떨어지지 만 조직 내에서 공통 표준을 준수해야합니다. 따라서 무엇을 결정하든 표준을 선택하고 보편적으로 채택하십시오.

에서 제공하는 당신이 제안을 따르도록한다면, 선택해야할지에 관해서는 클린 코드 표시, 자연스럽게 그 헬퍼 방법을 제안 신문 기사처럼 위에서 아래로에서 파일을 읽을 수있을 것입니다 그들이 방법 거들기. 이것은 코드 구조의 가독성을 극대화합니다. 당신이 가지고 있다면

public void doSomething()
{
     helpMe();
     helpMeAgain();
}

파일은 다음과 같이 구성됩니다

public void doSomething() { }
private void helpMe() { }
private void helpMeAgain() { }

이것의 또 다른 부작용은 헬퍼에 자신의 헬퍼가 있음을 발견하고 파일에 실제로 존재하는 다른 클래스가 무엇인지 파악하는 데 도움이되며 해당 메소드가 있으므로 클래스를 추출하기 위해 리팩토링 할 수 있습니다 이미 순서대로 그룹화되어 있습니다. 그러나 그것은 부차적 인 이점입니다.


당신이 이것 또는 내가 할 것이라고 말하게되어 기쁘다. 나는 밥 마틴 자신에게 두 가지 방법이 각각 세 번째 방법을 사용하는지 어떻게 주문하는지 물었다. 이 경우 그는 3을 다른 2보다 아래에 둡니다.
Daniel Kaplan

1
귀하의 예는 그것을 보여주지 않지만, 이것은 개인 메소드 사이에 공개 메소드가 혼합되어 있습니다. 이 기술을 사용하지만 공개 인터페이스를 쉽게 읽는다는 말이 많기 때문에 종종 찢어진 느낌을 받고 모든 공개 메소드를 맨 위로 올리려고합니다.
Sean

@Sean, 글쎄, 나는 일반적으로 내 클래스의 공개 API를 제한하거나 적절한 경우 정면으로 남겨두고 구현 도우미를 공동 작업자에게 제공하려고합니다. 테스트, 리팩터링, 추출, 반복. 그러나 물론 그것은 당신이 가고 싶은 거리에 달려 있습니다. 나는 작은 수업을 선호합니다.
Anthony Pegram

11

공용 메소드는 클래스의 인터페이스입니다. 수업 사용에 관심이있는 사람은 인터페이스에만 관심이 있습니다. 클래스 사용자의 관점에서, 공개 메소드를 먼저 사용하여 스크롤을 줄이는 것이 유용합니다.


5

C 및 C ++에서는 선언이 필요하지 않기 때문에 도우미 메서드가 가장 먼저 배치됩니다. 많은 사람들이 그 습관을 중요하지 않은 다른 언어로 옮겼습니다.

일반적으로 파일을 열 때 공개 인터페이스를 찾고 있기 때문에 공개 메소드를 선호합니다. 모든 구현 세부 정보를 스크롤하지 않아도됩니다. 또한 내가 본 것 중 가장 인기있는 스타일이기 때문에 컨벤션에 대해 언급해야합니다.


2

나는 클래스의 메소드 순서가 가시성이 아닌 가독성과 컨텍스트를 기반으로하는 것을 좋아합니다.

즉, 'open'메소드는 아마도 'close'앞에 속합니다. 두 개의 공개 메소드 'a'와 'b'가 개인 'c'를 호출하고 그것이 유일한 호출 방법이라면, 'c'가 옆에있는 것을 좋아합니다.

나는 가시성을 기반으로 한 방법 순서 규칙이 좋은 것이라고 생각하지 않습니다.


1

나는 멤버들이 중요도 / 가시성 순서대로 나열되는 클래스를 선호하는 경향이있다 (여기서 나는 공개 인터페이스에 직접적인 영향을 미친다는 것을 의미한다).

따라서 사적인 기능은 밀리는 경향이있다.

이와 비슷한 기능들을 그룹화하는 경향이있는 예외도 있지만, 공공의 물건과 섞인 작은 사적인 기능을 여전히 찾을 수 있습니다.

이것은 당신이 말했듯이 맛의 문제입니다.

그러나 내 것이 아닌 코드 작업을 할 때 프로젝트에서 사용되는 규칙을 따르려고 노력할 것입니다.

내가 이것을 추적하는 좋은 방법 중 하나는 (여기서 Eclipse로 작업한다고 가정) 코드 형식 구성을 생성하고 프로젝트 소스와 함께 내보내 소스 제어에 커밋하는 것입니다. 그렇게하면 프로젝트에 대한 최신 코드 컨벤션에서 단 몇 번의 클릭만으로 설정하고 CTRL-SHIFT-F를 습득하여 많은 인수를 막을 수 있습니다.

자동 포맷터를 사용하면 추가로 규칙에 따라 작업을 수행 할 수 있고 커밋하기 전에 코드를 포맷 할 수 있습니다. 상기 컨벤션 및 포맷팅 툴에 따라 YMMV.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.