메소드를 간소화하고 코드 중복을 제거하며 향후 개선을 위한 기반을 마련
그룹으로 묶을 수 있는 코드가 있다면 적절한 메소드를 만들어서 해당 코드를 메소드 안으로 이동
더 읽기 쉬운 코드
재사용이 가능해서 코드 중복 감소
코드의 독립적인 부분을 분리하여 오류 가능성 감소
메소드 호출 부분이 메소드 자체보다 더 자세할 때 메소드 호출을 메소드 내용으로 바꾸고 메소드 삭제
식의 결과나 부분을 자체 설명이 가능한 별도의 변수 작성
<변경 전>
void renderBanner() {
if ((platform.toUpperCase().indexOf("MAC") > -1) &&
(browser.toUpperCase().indexOf("IE") > -1) &&
wasInitialized() && resize > 0 )
{
// do something
}
}
<변경 후>
void renderBanner() {
final boolean isMacOs = platform.toUpperCase().indexOf("MAC") > -1;
final boolean isIE = browser.toUpperCase().indexOf("IE") > -1;
final boolean wasResized = resize > 0;
if (isMacOs && isIE && wasInitialized() && wasResized) {
// do something
}
}
변수에 대한 참조를 표현식 자체로 변경
임시 변수에 표현식의 결과를 저장하고 있다면 새로운 메소드에 표현식을 넣고 임시 변수대신 메소드 호출
메소드의 목적을 이해하기 쉽기 때문에 코드 가독성이 좋아짐
메소드 재사용이 되므로 중복 코드를 제거할 수 있음
임시 변수에 표현식의 결과를 저장하고 있다면 새로운 메소드에 표현식을 넣고 임시 변수대신 메소드 호출
쉽게 교체 가능하므로 유지 관리가 편해짐
변수명으로 쉽게 의도를 파악하므로 코드가 읽기 쉬워짐
매개변수 대신 지역 변수 사용
쉽게 교체 가능하므로 유지 관리가 편해짐
메소드 추출 방법을 사용할 때 도움이 됨
지역 변수가 얽혀 있어서 메소드 추출을 못한다면 메소드를 별도의 클래스로 변환
메소드의 크기가 커지는 것을 막을 수 있음
원래의 클래스를 오염시키지 않고 클래스 내의 하위 메소드로 분활 가능
알고리즘을 구현하는 메서드의 본문을 새로운 알고리즘으로 변경
📑 참고 자료