51. 메서드 시그니처를 신중히 설계하라
✅ 핵심 요약
메서드 이름과 매개변수 목록은 API의 얼굴입니다. 이름은 명확하게, 매개변수는 간결하게, 타입은 유연하게, 동작은 오해 없이 설계해야 합니다.
📚 필수 개념 요약
메서드 시그니처
메서드 이름 + 매개변수 타입/순서
편의 메서드
자주 쓰는 기본 기능을 한 줄로 제공하는 추가 메서드 (addAll
, removeIf
등)
boolean 매개변수
메서드 동작을 분기시키는 flag 변수 (true
, false
)
enum 타입
boolean
보다 의미가 명확한 상태 표현 방식
빌더 패턴
선택적 매개변수가 많은 경우 가독성을 높이는 객체 생성 패턴
💡 핵심 포인트
좋은 이름은 명확한 기능을 암시한다 (
add
,merge
,isEmpty
)boolean → enum 치환 권장
매개변수는 0~3개 이하로 제한
같은 타입이 연속되면 위험! → 순서 실수 가능
편의 메서드 남발은 지양: 정말 자주 쓰이는 것만 추가
인터페이스 타입으로 매개변수 선언 → 유연성 확보
🔍 장점 vs 단점
✅ API 가독성/사용성 향상
⛔ 설계에 시간과 고민이 많이 든다
✅ 유지보수성과 확장성 확보
⛔ 초기 구현 시 복잡해질 수 있음
✅ 실수 유발 가능성 감소
✅ 의도를 명확히 표현할 수 있음
❗ 자주 발생하는 실수
메서드 이름이 추상적임 (
handle()
,runTask()
) → 용도 모호boolean 플래그를 여러 개 나열 →
doAction(true, false, true)
?매개변수 순서 바뀜 → 버그 유발 (
int start, int end
vsint end, int start
)매개변수 타입으로 구체 클래스 사용 (
ArrayList
등)자주 쓰지 않을 편의 메서드를 무분별하게 추가
🛠️ 예제 요약
// 나쁜 시그니처: 매개변수 많고 의미 불분명
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