메서드 이름을 신중히 짓자
- 메서드 이름을 지을 때는 항상 표준 명명 규칙을 따라야 함. 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면, 아무리 복잡한 기능도 조합해 낼 수 있다.
- 기능을 원자적으로 쪼개다보면 중복이 줄고, 겳하성이 낮아져 코드를 수정하기 수월해짐.
- 따라서 테스트하기 쉬워짐.
- 특정 조합의 패턴이 상당히 자주 사용되면, 직교성이 낮아지더라도 편의 기능으로 제공하는 편이 좋을 수 있음.
'프로그래밍 언어 > JAVA' 카테고리의 다른 글
Java Stream Collectors 공부 (0) | 2023.09.10 |
---|---|
Effective Java : 아이템 46. 스트림에는 부작용 없는 함수를 사용하라. (0) | 2023.09.10 |
Effective Java : 아이템 76. 가능한 한 실패 원자적으로 만들어라. (0) | 2023.09.08 |
Effective Java : 아이템 83. 지연 초기화는 신중히 사용하라 (0) | 2023.09.06 |
Effective Java : 아이템 67. 최적화는 신중히 하라 (0) | 2023.09.06 |