Skip to content

Latest commit

 

History

History
101 lines (77 loc) · 3.7 KB

51. 메서드 시그니처를 신중히 설계하라.md

File metadata and controls

101 lines (77 loc) · 3.7 KB

51. 메서드 시그니처를 신중히 설계하라

메서드 이름을 신중히 짓자

  • 항상 표준 명명 규칙을 따라야 한다.
  • 최우선으로 이해할 수 있고, 같은 패키지에 속한 다른 이름들과 일관되게 지어야 한다.
  • 긴 이름은 피하자.

편의 메서드를 너무 많이 만들지 말자

  • 모든 메서드는 각각 자신의 소임을 다해야 한다.
  • 메서드가 너무 많은 클래스나 인터페이스는 익히고, 사용하고, 문서화하고, 테스트하고, 유지보수하기 어렵다.
  • 확신이 서지 않으면 만들지 말자.

매개변수 목록은 짧게 유지하자

  • 4개 이하가 좋다.
  • 같은 타입의 매개변수 여러 개가 연달아 나오는 경우가 특히 해롭다.

여러 메서드로 쪼개자

//지정된 범위의 부분리스트에서의 인덱스 찾기
public int findIndex(int fromIndex, int toIndex, Object element) { ... }
    
List<String> list = List.of("짱구", "짱아", "흰둥이", "액션가면");
int index = list.findIndex(0, 2, "짱구");
//부분리스트 반환하기
public List<String> subList(int fromIndex, int toIndex) { ... }
//인덱스 찾기
public int indexOf(Object element) { ... }
    
List<String> list = List.of("짱구", "짱아", "흰둥이", "액션가면");
int index = list.subList(0, 2)
    .indexOf("짱구");
  • 잘못하면 메서드가 너무 많아질 수 있지만, 직교성을 높여 준다.
    • 직교성이 높다 == 공통점이 없는 기능들이 잘 분리되어 있다
    • List 인터페이스는 지정된 범위의 부분리스트에서의 인덱스를 찾는 메서드를 제공하는 대신 subListindexOf 메서드를 제공한다.

매개변수 여러 개를 묶어주는 도우미 클래스를 만들자

//도우미 클래스 사용 X
public void calculate(int height, int weight) { ... }
짱구 키: 184, 몸무게: 65
예상 BMI: 19.19
실수로 키랑 몸무게랑 위치 바뀜;;;
find(65, 184);  //BMI: 435.50
public void calculate(Bmi bmi) { ... }
private static class Bmi {
    int height;
    int weight;
}
  • 잇따른 매개변수 몇 개를 독립된 하나의 개념으로 볼 수 있을 때 추천하는 기법이다.

빌더 패턴

  • 객체 생성에 사용한 빌더 패턴 을 메서드 호출에 응용하자.
  • 매개변수가 많을 때, 특히 그중 일부는 생략해도 괜찮을 때 도움이 된다.

매개변수의 타입으로는 클래스보다는 인터페이스가 더 낫다.

매개변수의 타입 - 클래스
public void buy(Btc btc) { ... }
buy(btc);   //가능
buy(xrp);   //불가능
    
매개변수의 타입 - 인터페이스
public void buy(Coin coin) { ... }
buy(btc);   //가능
buy(xrp);   //가능
buy(eth);   //쌉가능
  • 특정 구현체만 사용하도록 제한하지 말고 인터페이스를 사용하자.
    • HashMap 대신 Map을 넘기면 TreeMap, ConcurrentHashMap 등 모든 Map 구현체를 인수로 건넬 수 있다.
    • 다형성!!!

boolean보다는 원소 2개짜리 열거 타입이 낫다

//변경 전
true - 콜라
false - 사이다
웰치스는????
//변경 후
public enum Beverage { 콜라, 사이다, 웰치스, 파워에이드 }
  • 열거 타입을 사용하면 코드를 읽고 쓰기가 더 쉬워진다.
  • 나중에 선택지를 추가하기도 쉽다.