3.3.4 리팩토링 제안
‘상호 보완적이며 대칭적인’ 메서드가 빠진 인터페이스나 클래스를 찾았다면 이것은 아마도 불완전한 추상화를 의미할 것이다. 표 3.2에서 일반적인 연산 쌍을 나열해 놓았다. 여기서는 단지 일반적인 유형만 예로 나열했고, 실제 이름은 맥락에 따라 달라질 수 있다. 예를 들어, Stack이라는 맥락에서 연산 이름은 push와 pop이 되는 반면, 데이터 스트림 맥락에서 연산 이름은 source와 sink가 되어야 한다. 이런 악취에 대응하는 리팩토링 전략은 인터페이스나 클래스 자체에서 상호 보완적인 연산이 빠졌는지 확인하는 방식이다.
또 서로 관계가 있는 메서드를 함께 제공하게 요구하는 언어나 라이브러리 관례가 있을 때는 추상화에서 빠진 메서드를 추가하는 리팩토링이 필요하다.
▼ 표 3.2 일반적인 대칭 메서드 쌍
min/max |
open/close |
create/destroy |
get/set |
read/write |
print/scan |
first/last |
begin/end |
start/stop |
lock/unlock |
show/hide |
up/down |
source/target |
insert/delete |
first/last |
push/pull |
enable/disable |
acquire/release |
left/right |
on/off |