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

    메서드 이름을 신중히 짓자

    • 메서드 이름을 지을 때는 항상 표준 명명 규칙을 따라야 함. of(), newInstance() 같은 것들. 
    • 이해할 수 있고, 같은 패키지에 속한 다른 이름들과 일관되게 짓는게 중요함. 

    클래스 / 인터페이스에 편의 메서드를 너무 많이 만들지 말자 

    • 메서드가 너무 많은 클래스는 사용/공부/문서화/테스트/유지보수하기 어려움. 
    • 인터페이스에 너무 많은 메서드가 존재하면, 구현하기 어려움. 

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

    • 매개변수는 4개 이하로 만들자. 그 이상이 되면, 메서드 호출에 어떤 매개변수가 필요했는지 기억하기 어려움.
    • 만약 같은 타입의 매개변수가 연속되었을 때, 위치가 살짝 바뀌어도 컴파일되어 오류가 발생할 수 있음.

     


    매개변수 목록을 짧게 줄여주는 방법

    • 여러 메서드로 쪼개기
      • 쪼개진 메서드는 각 매개변수의 부분집합을 전달받음.
      • 단점 : 잘못하면 메서드가 많아질 수 있음.
      • 장점 : 메서드를 쪼개서 직교성이 올라가면 프로그램적으로는 더 좋아질 수 있음. 
    • 매개변수를 묶어주는 도우미 클래스 (DTO 같은 것들) 생성하기 
      • 예를 들어 카드 게임일 때, 도우미 클래스 Card를 만들고 (Rank, Suit)를 하나로 묵기
    • 빌더 패턴을 이용하기
      • 많은 매개변수에 대해 setter()를 생성하고, 메서드 체이닝을 함.
      • execte()를 할 때 실행하고, 이 때 매개변수 유효성 검사를 함.
    instance.setA().setB().execute();

    빌더 패턴을 이용하는 것은 위와 같이 실행하는 것을 의미한다. 

     


    매개변수 타입은 클래스보다는 인터페이스가 낫다. 

    • 매개변수는 HashMap을 넘기는 대신 Map을 쓰자. 
    • 인터페이스 대신 구현체로 지정하면, 클라이언트가 구현체만 사용하도록 하게 되고 확장에 불리하다. 

     


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

    • True, False로 표현하면 어떤 내용인지 매개변수를 직접 봐야한다. 만약 이런 경우라면 원소 2개짜리 Enum을 사용하는 것이 좋음. 
    // True / False가 좋음? 
    Thermometer.newInstance(true);
    
    // enum
    Thermometer.newInstance(TemperatureScale.CELSIUS);

    위처럼 2개 짜리를 True, False로 표현하는 거라면 오히려 enum을 사용하는 것이 더 좋을 수 있음. 

     


    소프트웨어의 직교성

    • 직교성이 높다 = '공통점이 없는 기능들이 잘 분리되어 있음'을 의미함.
    • 직교성을 높이면 오히려 메서드 수가 줄어들 수 있음
      • 기본 기능만 잘 갖춰놓은 API면, 아무리 복잡한 기능도 조합해 낼 수 있다. 
      • 기능을 원자적으로 쪼개다보면 중복이 줄고, 겳하성이 낮아져 코드를 수정하기 수월해짐. 
      • 따라서 테스트하기 쉬워짐. 
    • 특정 조합의 패턴이 상당히 자주 사용되면, 직교성이 낮아지더라도 편의 기능으로 제공하는 편이 좋을 수 있음. 

    댓글

    Designed by JB FACTORY