## 메서드명 변경
- 메서드명을 직관적인 이름으로 바꾸자
## 매개변수 추가
- 메서드가 자신을 호출한 부분의 정보를 더 많이 알아야 할 땐 객체에 그 정보를 전달할 수 있는 매개변수를 추가하자
## 매개변수 제거
- 메서드가 어떤 매개변수를 더 이상 사용하지 않을 땐 그 매개변수를 삭제하자
## 상태 변경 메서드와 값 반환 메서드를 분리
- 값 반환 기능과 객체 상태 변경 기능이 한 메서드에 들어 있을 땐 질의 메서드와 변경 메서드로 분리하자
- 사이드 이펙트가 있는 메서드와 없는 메서드의 차이를 명확히 분간하는 것이 좋다.
- 멀티스레딩에서 병행 처리시에는 일단 분리하고 두 기능을 모두 수행하는 제 3의 메서드를 두어야 한다.
- CQRS
## 메서드를 매개변수로 전환
- 여러 메서드가 기능은 비슷하고 안에 든 값만 다를 땐 서로 다른 값을 하나의 매개변수로 전달받는 메서드를 하나 작성하자.
- java에서는 매개변수로 functional interface를 활용할 수 있다.
## 매개변수를 메서드로 전환
- 매개변수로 전달된 값에 따라 메서드가 다른 코드를 실행할 땐 그 매개변수로 전달될 수 있는 모든 값에 대응하는 메서드를 각각 작성하자
- 여러 메서드를 작성하고 조건문은 없애는 것이 좋다.
- 매개변수 값이 많이 변할 가능성이 있을 때는 적용하면 안된다.
## 객체를 통째로 전달
- 객체에서 가져온 여러 값을 메서드 호출에서 매개변수로 전달할 땐 그 객체를 통째로 전달하게 수정하자.
- 통 객체를 전달하면 통 객체와 호출된 객체가 서로 의존하게 된다. 이것이 의존성 구조를 망가뜨릴 것 같으면 적용하면 안된다.
## 매개변수 세트를 메서드로 전환
- 매서드가 매개변수로 전달받은 값을 다른 방법으로도 가져올 수 있다면 a메서드를 b 메서드가 호출하게 하자
## 매개변수 세트를 객체로 전환
- 특정 매개변수들이 늘 함께 전달되는 경우를 흔히 볼 수 있다.
## 쓰기 메서드 제거
- 생성할 때 지정한 필드 값이 절대로 변경되지 말아야 할 땐, 그 필드를 설정한 모든 쓰기 메서드를 삭제하자.
## 메서드 은폐
- 메서드가 다른 클래스에 사용되지 않을 땐, private으로 만들자
## 생성자를 팩토리 메서드로 전환
- 객체를 생성할 때 단순한 생성만 수행하게 해야할 땐 생성자를 팩토리 메서드로 교체하자
- 분류 부호를 하위클래스로 바꿀 때 확실히 이 기법이 필요한 상황이다.
## 하향 타입 변환을 캡슐화
- 하향 타입 변환(형변환) 기능을 메서드 안으로 옮기자.
- 리턴타입을 Object로 하지 말자
## 에러 부호를 예외 통지로 교체
- 메서드가 에러를 나타내는 특수한 부호를 반환할 땐 그 부호 반환 코드를 예외 통지 코드로 바꾸자
- return 1, return 0 이렇게 하지 말고 exception을 던져라.
## 예외 처리를 테스트로 교체
- 호출 부분에 사전 검사 코드를 넣으면 될 상황인데 예외 통지를 사용했을 땐 호출 부분이 사전 검사를 실시하게 수정하자
댓글
댓글 쓰기