6장

Extract Method(v)

  • 그룹으로 함께 묶을 수 있는 코드 조각이 있으면, 코드의 목적이 잘 드러나도록 메소드의 이름을 지어 별도의 메소드로 뽑아낸다.

동기

지나치게 긴 메소드
주석이 필요한 코드( 목적을 이해하기 위한 )

장점 ( 짧고 이해하기 쉬운 이름으로 메소드를 만들었을 때 )

재사용 확률 높아짐
메소드를 볼 때 주석을 읽는 것 같은 느낌이 들도록 할 수 있음
오버라이드 하기 쉬움

절차

메소드를 새로 만듦
의도를 잘 나타내도록 이름을 정함
뽑아내고자 하는 부분의 코드를 복사하여 새 메소드로 옮김
원래 메소드에서 사용되고 있는 지역변수가 뽑아낸 코드에 있는지 확인
뽑아낸 코드 내에서만 사용되는 임시변수가 있는지 본다
뽑아낸 코드 내에서 지역변수의 값이 수정되는지 본다.

Inline Method

메소드 몸체가 메소드의 이름만큼이나 명확할 때는, 호출하는 곳에 메소드의 몸체를 넣고, 메소드를 삭제하라

동기

때론 메소드 몸체가 메소드의 이름만큼 명확할 때가 있다면 메소드를 삭제

절차

메소드가 다형성을 가지고 있지 않은지 확인 ( 서브클래스에서 오버라이드하고 있는 메소드에는 적용 X )
메소드를 호출하고 있는 부분을 모두 찾는다
각각의 메소드 호출을 메소드 몸체로 바꾼다.
컴파일과 테스트
메소드 정의 제거

Inline Temp

간단한 수식의 결과값을 가지는 임시변수가 있고, 그 임시변수가 다른 리팩토링을 하는데 방해가 된다면, 이 임시변수를 참조하는 부분을 모두 원래의 수식으로 바꾸라.

동기

Replace Temp with Query의 한 부분으로 사용
메소드 호출의 결과값이 임시변수에 대입되는 경우

절차

임시변수를 final로 선언한 다음 컴파일
임시변수를 참조하고 있는 곳을 모두 찾아 대입문의 우변에 있는 수식으로 바꾼다.
각각의 변경에 대해 컴파일과 테스트
임시변수의 선언과 대입문 제거
컴파일과 테스트

Replace Temp with Query(v)

어떤 수식의 결과값을 저장하기 위해서 임시변수를 사용하고 있다면, 수식을 뽑아내서 메소드로 만들고, 임시변수를 참조하는 곳을 찾아 모두 메소드 호출로 바꾼다.

Extract Method 적용하기 전의 필수 단계
지역변수 또는 임시변수는 메소드 추출을 어렵게 하기 때문에 가능한 많은 지역변수를 질의 메소드로 바꾸는 것이 좋음
임시변수에 값이 한번만 대입되는지 확인

여러번 대입되는 경우 Split Temporary Variable 적용
임시변수를 final로 선언
컴파일
대입문의 우변을 메소드로 추출
컴파일과 테스트
Inline Temp 적용

Introduce Explaining Variable(v)

복잡한 수식이 있는 경우에는, 수식의 결과나 또는 수식의 일부에 자신의 목적을 잘 설명하는 이름으로 된 임시변수를 사용하라.

동기

특히 조건문에서 각각의 조건의 뜻을 잘 설명하는 이름의 변수로 만들어 사용할 때 유용
긴 알고리즘에서 각 단계의 계산 결과
하지만 대부분 Extract Method를 보통 쓰게 된다.

Split Temporary Variable(v)

루프 안에 있는 변수나 collecting temporary variable도 아닌 임시변수에 값을 여러 번 대입하는 경우에는, 각각의 대입에 대해서 따로따로 임시변수를 만들어라.

어떤 변수든 여러 가지 용도로 사용되는 경우에는 각각의 용도에 대해 따로 변수를 사용하도록 바꾸어야 함
임시변수가 처음 선언된 곳과 임시변수에 값이 처음 대입된 곳에서 변수의 이름을 바꾼다.
새로 만든 임시변수를 final로 선언
임시변수에 두 번째로 대입하는 곳의 직전까지 원래 임시변수를 참조하는 곳을 모두 바꿈
임시변수에 두 번째로 대입하는 곳에서 변수 선언
컴파일 & 테스트

Remove Assignments to Parameters(v)

파라미터에 값을 대입하는 코드가 있으면, 대신 임시변수를 사용하도록 하라.

파라미터가 값에 의한 전달(pass by value)이라면 문제 없지만 참조에 의한 전달(pass by reference)일 때는 혼동
출력 파라미터를 사용하는 언어는 상관없긴 하지만 출력 파라미터는 가능한 적게 사용하는 것이 좋다.
파라미터를 위한 임시변수를 만든다.
파라미터에 값을 대입한 코드 이후에서 파라미터에 대한 참조를 임시변수로 바꾼다.
파라미터에 대입하는 값을 임시변수에 대입하도록 바꾼다.
컴파일 & 테스트

Substitute Algorithm

알고리즘을 보다 명확한 것으로 바꾸고 싶을 때는, 메소드의 몸체를 새로운 알고리즘으로 바꾼다.

대체 알고리즘을 적용하여 컴파일
알고리즘 테스트, 결과가 같으면 끝
결과 같지 않다면, 디버깅

Last updated