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

✅ 핵심 요약

메서드 이름과 매개변수 목록은 API의 얼굴입니다. 이름은 명확하게, 매개변수는 간결하게, 타입은 유연하게, 동작은 오해 없이 설계해야 합니다.


📚 필수 개념 요약

개념
설명

메서드 시그니처

메서드 이름 + 매개변수 타입/순서

편의 메서드

자주 쓰는 기본 기능을 한 줄로 제공하는 추가 메서드 (addAll, removeIf 등)

boolean 매개변수

메서드 동작을 분기시키는 flag 변수 (true, false)

enum 타입

boolean보다 의미가 명확한 상태 표현 방식

빌더 패턴

선택적 매개변수가 많은 경우 가독성을 높이는 객체 생성 패턴


💡 핵심 포인트

  • 좋은 이름은 명확한 기능을 암시한다 (add, merge, isEmpty)

  • boolean → enum 치환 권장

  • 매개변수는 0~3개 이하로 제한

  • 같은 타입이 연속되면 위험! → 순서 실수 가능

  • 편의 메서드 남발은 지양: 정말 자주 쓰이는 것만 추가

  • 인터페이스 타입으로 매개변수 선언 → 유연성 확보


🔍 장점 vs 단점

장점
단점

✅ API 가독성/사용성 향상

⛔ 설계에 시간과 고민이 많이 든다

✅ 유지보수성과 확장성 확보

⛔ 초기 구현 시 복잡해질 수 있음

✅ 실수 유발 가능성 감소

✅ 의도를 명확히 표현할 수 있음


❗ 자주 발생하는 실수

  1. 메서드 이름이 추상적임 (handle(), runTask()) → 용도 모호

  2. boolean 플래그를 여러 개 나열 → doAction(true, false, true)?

  3. 매개변수 순서 바뀜 → 버그 유발 (int start, int end vs int end, int start)

  4. 매개변수 타입으로 구체 클래스 사용 (ArrayList 등)

  5. 자주 쓰지 않을 편의 메서드를 무분별하게 추가


🛠️ 예제 요약

// 나쁜 시그니처: 매개변수 많고 의미 불분명
public void draw(int x, int y, int width, int height,
                 int r, int g, int b,
                 boolean fill, boolean border) { ... }

// 개선: 의미 있는 객체로 추상화 + boolean → enum
public enum StyleOption { FILL, BORDER }

public void drawRectangle(Point pos, Dimension size, Color color, Set<StyleOption> options) {
    if (options.contains(StyleOption.FILL)) { ... }
}
// 나쁜 예시: 구체 클래스 사용
public void processUsers(ArrayList<String> users) { ... }

// 개선: 인터페이스 사용
public void processUsers(List<String> users) { ... }

✅ 결론

API는 ‘잘 만든 도구’여야 합니다. 작성자의 의도를 그대로 전달할 수 있는 명확한 시그니처는 개발자 경험을 크게 향상시키고, 실수를 줄이는 안전 장치가 됩니다.


🎯 느낀점

이번 아이템을 공부하면서 '좋은 API'와 '나쁜 API'의 차이를 알게 되었음. 이 아이템을 보면서 느낀 건, 좋은 메서드는 읽자마자 "아 이건 이런 기능이겠구나" 하고 감이 오는 메서드

  • boolean을 enum으로 바꾸는 팁.

  • 인터페이스 타입으로 매개변수를 받는 게 더 유연함.

  • 앞으로 메서드 만들 땐 꼭 이 아이템 기준으로 다시 한번 점검


Last updated