BE/Java

[Effective Java] 아이템 51. 메서드 시그니처를 신중히 설계하라

멍목 2022. 11. 14. 22:54
반응형

EFFECTIVE JAVA(이펙티브 자바)

 

이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다.


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

 

API 설계 요령

1. 메서드 이름을 신중히 짓자.

  • 항상 표준 명명 규칙을 따라야한다.

 

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

  • 너무 많으면 익히고, 사용하고, 문서화하고, 테스트하고 ,유지보수 하기 어렵다.
  • 확신이 서지 않으면 만들지 말자.

 

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

  • 4개 이하가 좋다.
  • 같은 타입의 매개변수 여러 개가 연달아 나오는 경우가 특히 좋지 않다. → 실수로 순서를 바꿔 입력하는 경우, 그대로 컴파일되고 실행되어 의도와 다른 동작이 일어남
  • 과하게 긴 매개변수 목록을 줄이는 방법
    1. 여러 메서드로 쪼갠다.
      • 쪼개진 메서드 각각은 원래 매개변수 목록의 부분집합을 받는다.
      • 잘못하면 메서드가 너무 많아질 수 있지만, 직교성을 높여 오히려 메서드 수를 줄여주는 효과도 있다. ex) java.util.List
    2. 매개변수 여러 개를 묶어주는 도우미 클래스를 생성
      • 일반적으로 이런 도우미 클래스는 정적 멤버 크래스로 둔다.
      • 잇따른 매개변수 몇 개를 독립된 하나의 개념으로 볼 수 있을 떄 추천하는 기법
      • 예를 들어 카드게임을 클래스로 만들 때, 카드의 숫자와 무늬를 뜻하는 두 매개변수를 항상 같은 순서로 전달할 것이다. 따라서, 이 둘을 묶는 도우미 클래스를 만들어 하나의 매개변수로 주고받으면 깔끔하다.
    3. 위의 두 기법을 혼합한 것으로, 객체 생성에 사용한 빌더 패턴을 메서드 호출에 응용한다고 보면 된다.
      • 이 기법은 매개변수가 많을 때, 특히 그중 일부는 생략해도 괜찮을 때 도움이 된다.

 

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

  • 매개변수로 적합한 인터페이스가 있다면 그 인터페이스를 직접 사용하자
  • 예를 들어, 메서드에 HashMap을 넘길 일이 전혀 없다면 Map을 사용하자. 그러면 HashMap, TreeMap 등 다른 Map 구현체도 인수로 건넬 수 있다.

 

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

  • 메서드 이름상 boolean을 받아야 의미가 더 명확할 때는 예외
  • 열거 타입을 사용하면 코드를 읽고 쓰기가 더 쉬워진다.
반응형