*알림 : *
Effective Java 3판은 Java 9까지 도입된 언어적 기능을 중심으로 서술되어 있습니다. 10버젼 이후의 Java 개발을 하시는 분들은 우회적인 접근법 대신 Java 언어 내 새로 도입된 기능이 더 간결하고 좋을 수 있습니다.해당 포스팅은 SSAFY 내 책읽기 스터디의 활동을 통해 작성된 포스팅입니다.
https://github.com/kjsu0209/JavaBook
https://medium.com/javabook
메서드 이름을 신중하게 짓자.
- 메서드 이름만 보고도 동작을 유추할 수 있도록
- 같은 패키지에 있는 다른 메서드와 일관성
- 개발자 커뮤니티에서 통용되는 convention 따르기
- 긴 이름 피하기
편의 메서드를 너무 많이 만들지 말자
- 메서드가 너무 많은 클래스는 쓰기 어렵고 유지보수하기 어렵고 문서화 하기 어렵고 기타 등등 힘들다!
- 메서드는 각 기능을 완벽히 수행하는 메서드로 제공해야 한다.
- 자주 쓰이는 경우에는 고려해보자.
- 편의성 vs 복잡성의 문제다.
매개변수 목록은 짧게 유지하자.
- 4개 이하가 좋다. 사람의 기억 능력엔 한계가 있다.
- 참고하기 : [코싸인의 인지과학 이야기]
기억(3) by 코싸인 - 특히 같은 타입의 매개변수가 연속하여 위치한다면, 개발자가 실수로 순서를 바꿔서 사용할 가능성이 있으며 의도와 다른 엉뚱한 동작이 있을 수 있다.
매개변수 목록을 짧게 쪼개는 테크닉
- 여러 메서드로 쪼갠다List 인터페이스의 부분 리스트에서 주어진 원소의 인덱스를 찾는다고 가정하면, 매개변수는 리스트의 시작, 끝, 찾을 원소 총 3개의 매개변수를 필요로 할 것이다. 그러나 인터페이스를 잘 살펴보면
- 부분 리스트를 반환하는 subList
- 인덱스를 알려주는 indexOf 메서드
- 를 기술하고 있으며 각각 매개변수 2개, 1개로 쪼개서 메서드를 호출한 결과를 잘 버무리면 된다.
- 메서드가 많아질 걱정을 할 수도 있지만, 소프트웨어 공학적으로 널리 받아들여지는 개념인 직교성(Orthogonality)을 높여서 메서드를 줄일 수 있다.
- 매개변수 여러 개를 묶어주는 Helper 클래스를 만든다.
- 복수의 매개변수를 하나의 개념으로 묶을 수 있을 때 사용할 수 있다. 예를 들면 2차원 평면상의 좌표인 x,y를 Coordination이란 클래스로 묶을 수도 있고, 카드는 숫자와 무늬로 묶을 수도 있다. 일반적으로 정적 멤버 클래스로 두는 것이 좋다.
- 빌더 패턴을 이용한다.
- 모든 매개변수를 하나로 추상화한 객체를 만든다. (2번 테크닉에서 다룬 카드, 좌표 등)
- setter 메서드로 필요한 매개변수를 세팅
- execute 메서드로 설정한 매개변수의 유효성 검사
- 해당 객체를 넘겨 원하는 계산 수행
- 매개변수가 많지만 일부는 생략해도 좋을 때 사용할 수 있다.
매개변수의 타입으로는 클래스보다는 인터페이스가 낫다
- Map 인터페이스를 사용하면 HashMap, TreeMap 등 Map 인터페이스를 구현한 모든 구현체를 사용할 수 있다.
boolean과 원소 2개짜리 열거타입
- boolean이든 원소 2개짜리 열거타입이든 가장 의미를 잘 드러낼 수 있는 타입을 사용한다.
- 만약 어떤 학생의 시험 통과여부를 나타내는 변수는, boolean이 더 적합할 수도 있다. (isPassed=true, false)
- 온도계 클래스가 있다고 가정하자.둘 중 가독성이 좋은 코드는 자명하다.
public enum TemperatureScale {FARENHEIT, CELSIUS} Thermometer.newInstance(true); Thermometer.newInstance(TemperatureScale.CELSIUS);
'IT > Effective Java' 카테고리의 다른 글
[Effective Java 3/E] ITEM 53. 가변인수는 신중히 사용하라 (0) | 2021.04.15 |
---|---|
[Effective Java 3/E] ITEM 52. 다중정의는 신중히 사용하라 (0) | 2021.04.14 |
[Effective Java 3/E] ITEM 50. 적시에 방어적 복사본을 만들어라 (0) | 2021.04.14 |
[Effective Java 3/E] ITEM 49. 매개변수가 유효한지 검사하라 (0) | 2021.04.14 |
[Effective Java 3/E] ITEM 48. 스트림 병렬화는 주의해서 적용하라 (0) | 2021.04.14 |
댓글