-
자바에서 메소드 순서JAVA/Java 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
'JAVA > Java' 카테고리의 다른 글
Java 8 Stream (0) 2022.01.14 자바에서 Scanner.nextInt() 후 nextLine() 입력받지 못할 때 (1) 2022.01.10 Java Optional의 사용 (0) 2022.01.06 자바에서 static의 사용 (0) 2021.12.30 Method Reference (Java 8) (0) 2021.12.19