어떤 코드를 그룹으로 묶어도 되겠다고 판단되면,
그 코드를 뺴내어 목적을 잘 나타내는 직관적 이름의 메서드로 만든다
특징
- 매우 자주 사용됨
- 메서드가 너무 길거나 코드에 주석을 달아야만 의도를 이해할 수 있을때 사용
- 메서드가 적절히 잘게 쪼개져있으면 다른 메서드에서 사용하기 수월함
- 효과를 보려면 메서드의 이름도 잘 지어야 한다
- 그리고 쪼개는 것도
잘
해야겠지… 명확하게
- 그리고 쪼개는 것도
- 메서드명과 메서드 내용의 의미적 차이가 중요하다
- 명료하기만 하면 메서드 길이가 메서드명보다 짧아도된다
방법
- 목적에 부합하는 새 이름의 메서드를 생성한다
- 메서드명은 원리가 아니라 기능을 나타내야 한다.
- 기존 메서드에서 빼낸 코드를 새로 생성한 메서드로 복사한다
- 뺴낸 코드에서 기존 메서드의 모든 지역변수 참조를 찾는다
- 새로 생성한 메서드의 지역변수나 매개변수로 활용할 것이다
- 추출한 메서드에서 사용되는 임시변수에 대해 처리한다
- 원본 메서드에서 뺴낸 코드 부분을 새로 생성한 메서드 호출로 수정한다
지역변수 처리
-
추출한 메서드에서만 사용되는 값일 경우
- 해당 메서드로 임시변수를 분리
-
원본 메서드, 추출한 메서드 양쪽에서 다 사용되는 지역변수인데 추출한 메서드에서는 읽히기만 할 경우
- 추출한 메서드에 매개변수로 전달
-
원본 메서드, 추출한 메서드 양쪽에서 다 사용되는 지역변수이고 추출한 메서드에서 값이 변경될 경우
-
변경되는 지역변수가 1개일 경우 리턴해주는 형식으로 작성 가능
1
2
3
4
5int a = 0;
// do something to `a`
print(a);는 아래처럼 변경 가능
1
2int a = doSomething(0); // 필요한 값을 매개변수로 전달해줄 수 있음
print(a); -
2개 이상의 변수가 변경되는 경우, 메서드가 하나의 값을 반환하도록 더욱 분리해주는 것이 좋다.
가능하면 하나의 값만 반환하는 것이 좋다고 한다.
-
-
임시변수가 너무 많으면
임시 변수를 메서드 호출로 전환
같은 것을 사용해서 임시변수의 수를 줄이는 것이 좋다.
참고 : 마틴 파울러, 『리팩토링』, 김지원 옮김, 한빛미디어(2012)