JAVA/Java
자바에서 메소드 순서
dodop
2022. 1. 10. 18:04
프로젝트 리팩토링을 진행하면서 코드를 작성할 때, 변수와 메소드 순서에 대해서 작성하는 방법을 배웠다.
전체적인 순서
public class LottoResult {
// static 변수
private static final int LOTTO_PRICE = 1_000;
private static final int LOTTO_MATCH_MINIMUM_BOUND = 3;
// instance 변수
private Map<MatchType, Integer> result = defaultResult();
private BigDecimal yield;
// constructor
public LottoResult(final List<MatchResult> matchResult) {
setResult(matchResult);
}
// 메소드
private Map<MatchType, Integer> defaultResult() {
Map<MatchType, Integer> defaultResult = new LinkedHashMap<>();
for (MatchType matchType : MatchType.matchType()) {
defaultResult.put(matchType, 0);
}
return defaultResult;
}
private void setResult(List<MatchResult> matchResult) {
matchResult.forEach(m -> result(m.getMatchCount(), m.isMatchBonusBall()));
int totalPrice = calculate();
this.yield = yield(totalPrice, matchResult.size());
}
private void result(Integer matchCount, boolean matchBonusBall) {
if (matchCount >= LOTTO_MATCH_MINIMUM_BOUND) {
MatchType type = MatchType.of(matchCount, matchBonusBall);
this.result.put(type, this.result.get(type) + 1);
}
}
private int calculate() {
int total = 0;
for (Map.Entry<MatchType, Integer> entry : this.result.entrySet()) {
total += (entry.getKey().getMoney() * entry.getValue());
}
return total;
}
private BigDecimal yield(int totalPrice, int lottoSize) {
BigDecimal total = new BigDecimal(totalPrice);
return total.divide(new BigDecimal(lottoSize * LOTTO_PRICE), 2, BigDecimal.ROUND_HALF_UP);
}
// Getter 메소드
public Map<MatchType, Integer> getResult() {
return Collections.unmodifiableMap(result);
}
public BigDecimal getYield() {
return yield;
}
}
코드 작성시 다른 사람이 코드를 봤을 때에도 빠르게 파악하기 위한 코드 작성은 다음과 같은 순서로 진행되도록 작성한다.
- public 주석
- 클래스
- 정적 변수 : public -> protected -> private
- 인스턴스 변수 : public -> protected -> private
- 생성자
- 정적 메소드 : static 메소드 (main 메소드가 있다면 static 메소드 이전에 작성)
- 메소드 : 접근자 기준으로 작성하지 않고, 기능 및 역할별로 분류하여 기능을 구현하는 그룹별로 작성이 이루어지도록 해야한다. (public 사이에 private 메소드가 존재할 수 있다)
- 스탠다드 메소드 : toString, equals, hashcode 와 같은 메소드
- getter, setter 메소드 : 클래스의 밑 부분에 위치
(참고한 사이트)
https://stackoverflow.com/questions/4668218/are-there-any-java-method-ordering-conventions