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;
    }

}

코드 작성시 다른 사람이 코드를 봤을 때에도 빠르게 파악하기 위한 코드 작성은 다음과 같은 순서로 진행되도록 작성한다. 

  1.  public 주석 
  2.  클래스 
  3.  정적 변수 : public -> protected -> private 
  4.  인스턴스 변수 : public -> protected -> private 
  5. 생성자 
  6.  정적 메소드 : static 메소드 (main 메소드가 있다면 static 메소드 이전에 작성)
  7.  메소드 : 접근자 기준으로 작성하지 않고, 기능 및 역할별로 분류하여 기능을 구현하는 그룹별로 작성이 이루어지도록 해야한다.  (public 사이에 private 메소드가 존재할 수 있다)
  8.  스탠다드 메소드 : toString, equals, hashcode 와 같은 메소드
  9.  getter, setter 메소드 : 클래스의 밑 부분에 위치 

 

 

 

 

(참고한 사이트)

https://stackoverflow.com/questions/4668218/are-there-any-java-method-ordering-conventions

 

Are there any Java method ordering conventions?

I've got a large-ish class (40 or so methods) that is part of a package I will be submitting as course-work. Currently, the methods are pretty jumbled up in terms of utility public/private etc. and I

stackoverflow.com

http://daplus.net/java-java-%EB%A9%94%EC%86%8C%EB%93%9C-%EC%88%9C%EC%84%9C-%EA%B7%9C%EC%B9%99%EC%9D%B4-%EC%9E%88%EC%8A%B5%EB%8B%88%EA%B9%8C-%EB%8B%AB%EC%9D%80/

 

[java] Java 메소드 순서 규칙이 있습니까? [닫은] - 리뷰나라

휴무 . 이 질문은 더 집중되어야 합니다. 현재 답변을받지 않습니다. 이 질문을 개선하고 싶습니까? 이 게시물 을 편집 하여 한 가지 문제에만 집중할 수 있도록 질문을 업데이트하십시오 . 휴일

daplus.net