14
Refactoring 리리리리 6리 Replace Temp with Query Introduce Explaining Variable Split Temporary Variable 아아아 http://cafe.naver.com/architect1 TTF http://www.npteam.net

리펙토링 6장 p147_p158

Embed Size (px)

Citation preview

Page 1: 리펙토링 6장 p147_p158

Refactoring 리팩토링

6 장 Replace Temp with Query Introduce Explaining Variable Split Temporary Variable

아꿈사 http://cafe.naver.com/architect1TTF http://www.npteam.net

Page 2: 리펙토링 6장 p147_p158

Replace Temp with Query

■ 임시 변수를 질의로 대체하기

Page 3: 리펙토링 6장 p147_p158

Replace Temp with Query■ 임시 변수의 문제점 - 임시 변수는 임시로 사용되고 , 특정 부분에서만 의미를 가지므로 문제가 된다 .

■ 임시 변수를 질의 메소드로 바꾸면 ? - 임시 변수는 메소드 내에서만 사용된다 . 질의 메소드는 클래스 어디서든 접근 가능하다 .

- 임시 변수가 사용되면 메소드가 길어지는 경향이 있다 . 질의 메소드를 호출하기 때문에 , 메소드 길이가 짧아진다 .

Page 4: 리펙토링 6장 p147_p158

Replace Temp with Query■ 질의 메소드로 바꾸는 절차 - 임시 변수에 값이 한번만 대입되는지 확인한다 . 값이 여러 번 대입되면 , 임시 변수를 나누어서 작은 단위로 처리한다 .

- 대입문의 우변을 메소드로 추출한다 . 추출된 메소드를 private 으로 선언한다 . 나중에 public 으로 바꿀수도 있다 .

- Inline Temp(140) 를 적용한다 . 대부분 inline 이 가능한 변수들이다 .

Page 5: 리펙토링 6장 p147_p158

Replace Temp with Query■ 예제

- 2 개의 임시 변수를 제거하고 싶다 . basePrice, discountFactor

Page 6: 리펙토링 6장 p147_p158

Replace Temp with Query■ 예제

- final 로 선언하여 컴파일 테스트를 한다 .

Page 7: 리펙토링 6장 p147_p158

Replace Temp with Query■ 예제

- 대입문의 우변을 메소드로 뽑아낸다 .

Page 8: 리펙토링 6장 p147_p158

Replace Temp with Query■ 예제

- 임시변수 참조하는 곳을 바꾼다 . - 임시변수의 선언도 삭제한다 .

Page 9: 리펙토링 6장 p147_p158

Replace Temp with Query■ 예제

- discountFactor 에 대해서도 동일한 작업을 한다 .

Page 10: 리펙토링 6장 p147_p158

Introduce Explaining Variable

■ 설명하는 이름으로 된 임시변수

Page 11: 리펙토링 6장 p147_p158

■ 설명하는 이름으로 된 임시변수 - 수식이 복잡해져 알기 여려운 상황에서 수식의 결과를 설명하는 잘 지어진 이름의 임시 변수로 설명할 수 있다 .

- 그러나 임시변수는 좋지 않다 . Extract Method 를 추천한다 .

- 복잡한 로직일 경우 1. 복잡한 조건을 임시변수로 리펙토링 (Introduce Explaining Variable) 2. 임시변수를 질의로 대체하기 (Replace Temp with Query)

Introduce Explaining Variable

Page 12: 리펙토링 6장 p147_p158

Split Temporary Variable■ 각각의 임시변수 분리하기

Page 13: 리펙토링 6장 p147_p158

■ 각각의 임시변수 분리하기 - 임시변수는 긴 코드의 결과값을 참조하기 위해 보관하는 용도로 사용된다 .

- 이런 종류의 변수는 값이 “ 한번만” 설정되어야 한다 .

- 각각의 용도에 맞게 변수를 따로 지정해야 한다 . 하나의 임시변수를 두 가지 용도로 사용하면 , 코드를 보는 사람이 매우 혼란스러울 수 있다 .

Split Temporary Variable

Page 14: 리펙토링 6장 p147_p158

감사합니다 .