728x90
자바로 프로그램을 개발하다 public과 private 메서드를 어떻게 배치해야 좋은 구조인지 궁금해졌다. 구글 자바스타일 가이드에는 클래스 메서드 배치에 대해 다음과 같이 조언한다
The order you choose for the members and initializers of your class can have a great effect on learnability. However, there's no single correct recipe for how to do it; different classes may order their contents in different ways.
What is important is that each class uses some logical order, which its maintainer could explain if asked. For example, new methods are not just habitually added to the end of the class, as that would yield "chronological by date added" ordering, which is not a logical ordering.
클래스의 멤버 및 초기화 프로그램에 대해 선택하는 순서는 학습 가능성에 큰 영향을 미칠 수 있습니다. 그러나 이를 수행하는 방법에 대한 단일 올바른 방법은 없습니다. 각 클래스마다 내용을 다른 방식으로 주문할 수 있습니다.
중요한 것은 각 클래스가 요청 시 관리자가 설명할 수 있는 논리적 순서를 사용한다는 것입니다. 예를 들어, 새 메서드는 습관적으로 클래스 끝에 추가되지 않습니다. 그렇게 하면 논리적 순서가 아닌 "추가된 날짜별 연대순" 순서가 생성되기 때문입니다.
단일 올바른 방법은 없지만, 관리자가 설명할 수 있는 논리적 순서를 사용한다고 한다.
(만든 시간 순서대로 클래스 끝에 추가하는 건 지양)
이걸 읽고 내가 생각할 수 있는 배치방법은 다음과 같은 2가지였다.
- public 이 공용 인터페이스이고, 외부에 노출되니까 맨 위에 놓는게 맞지 않을까?
- public 공용 인터페이스에서 사용하는 private 메서드는 사용하는 곳 주변에 놓는 게 맞지 않을까?
- 만약 이렇게 한다면 private 메서드 배치는 공용 인터페이스에서 사용한 순서대로 놓는게 보기 편할 것 같다
그래서 구글링을 해봤다.
참고자료1: 기능별로 그룹화
https://www.oracle.com/java/technologies/javase/codeconventions-fileorganization.html
Oracle에서는 메서드 배치 방법을 다음과 같이 설명한다.
These methods should be grouped by functionality rather than by scope or accessibility. For example, a private class method can be in between two public instance methods. The goal is to make reading and understanding the code easier.
메서드는 범위나 접근성이 아닌 기능별로 그룹화되어야 합니다. 예를 들어, 프라이빗 클래스 메서드는 두 개의 퍼블릭 인스턴스 메서드 사이에 있을 수 있습니다. 목표는 코드를 더 쉽게 읽고 이해할 수 있도록 하는 것입니다.
public -> private 과 같이 순서를 나누기보다는 기능별로 모으는 게 코드를 더 쉽게 이해할 수 있다고 한다
참고자료2: 선호하는 방식이 다름
https://stackoverflow.com/questions/4668218/are-there-any-java-method-ordering-conventions
여기 댓글을 보면 public 메서드를 위쪽에 놓고, private 메서드를 밑에 놓는 걸 선호하는 사람들도 많이 보인다.
정답은 없지만 내 코드를 읽는 사람이 이해하기 쉽도록 배치하는 게 맞는 것 같다.
728x90
'프로그래밍 언어 > Java' 카테고리의 다른 글
[JAVA] 단위테스트 공부2: 테코톡 보고 정리 (0) | 2023.10.29 |
---|---|
[JAVA] 단위테스트 공부1: Mock 알아보기 (1) | 2023.10.29 |
[JAVA] StringBuilder 비우기(초기화하기) (1) | 2023.10.28 |
[JAVA] split vs StringTokenizer (1) | 2023.10.28 |
[Java] 자바 코드 컨벤션 정리(Google Java Style Guide) (0) | 2023.10.18 |