SlideShare uma empresa Scribd logo
1 de 17
Baixar para ler offline
Refactoring
Chapter6. 메서드 정리(Composing Methods)
- Hee -
Contents
 Extract Method
 Inline Method
 Inline Temp
 Replace Temp with Query
 Introduce Explaing Variable
 Split Temporary Vairable
 Remove Assigments to Parameters
 Replace Method with Method Object
 Substitue Algorithm
Extract Method메소드 추출
- 메소드의 길이가 너무 길 때
- 코드에 주석을 달아야 할 때
- 메소드를 분리하자. 단, 메소드의 이름은 메서드의 목적에 부합하도록 작성
Extract Method
메소드추출
Example1. 지역변수 사용안함 : 단순히 Method로 분리
Extract Method
메소드추출
Example2. 지역변수 사용 : 변수를 생성한 Method에 Parameter로 전달
Extract Method
메소드추출
Example3. 지역변수를 사용, 지역변수를 다시 대입(1)
Extract Method
메소드추출
Example3. 지역변수를 사용, 지역변수를 다시 대입(2)
Inline Method
메서드 내용 직접 삽입
- Method 기능이 단순해서 메서드명만 봐도 너무 뻔할 땐 메서드를 합쳐버리자
- Extract Method와 반대되는 방법
Inline Temp
임시변수 내용 직접 삽입
- 임시변수로 인해 다른 리팩토링이 힘들 땐
- 임시변수를 삭제하고 임시변수를 사용하는 부분을 수식으로 치환
Replace Temp with Query
임시변수를 메서드 호출로 전환
- 수식의 결과를 저장하는 임시변수가 있을 땐 그 수식을 메서드로 만들자
- 중복되는 코드로 인한 성능저하는 최적화 추후에 과정에서 해결
//basePrice 변수 삭제
Replace Temp with Query
임시변수를 메서드 호출로 전환
- Tip : 임시변수를 final로 선언 후 컴파일해서 그 임시변수들이 값을 한번만 대입받는지 시험
Introduce Explaining Variable직관적 임시변수 사용
- 사용된 수식이 복잡할 땐 수식의 결과나 수식의 일부분을 임시변수에 저장하자.
//수식이 복잡함..
Introduce Explaining Variable
직관적 임시변수 사용
- 위의 예제는 Method Extract 기법을 사용해도 된다.
- Extract Method 기법 적용이 더 어렵거나 복잡할 때만 I.E.V 방법 적용할 것
Split Temporary Variable임시변수 분리
- 임시변수를 하나를 여러 용도로 사용하지 말자.
//acc 변수에 값을 재할당하고 있음
//임시 변수에 final을 사용하여 값의 재할당을 방지
Remove Assignments to Parameters매개변수로의 값 대입 제거
- 파라미터로 받은 변수의 값을 변경하지 말자
- 메서드 안에서의 값의 변화는 호출한 루틴에 반영되지 않는다.(call by value)
- Tip. 이 방법을 강제적용하기 위해 final 키워드를 사용
//때로는 매개변수에 final을 사용하여 값의 재할당을 방지할 수 있음.
- 객체를 매개변수로 사용할 때 아래와 같은 방식은 절대 사용하지 말자(Call by reference)
Replace Method with Method Object메서드를 매서드 객체로 전환
- 지역변수 때문에 메서드 추출(R.T.Q) 적용이 어려운 메서드는 그 메서드 자체를 객체로 전환
- 지역변수를 전환한 객체의 필드로 만들고 그 메서드를 객체안의 여러 메서드로 쪼개자
- Pros. 손쉽게 Extract Method 적용 가능
//지역변수를 객체의 필드로 정의
//Method Extract
Substitute Alogorithm알고리즘 전환
- 쉽고/편한 알고리즘으로 교체

Mais conteúdo relacionado

Semelhante a Refactoring ch6

리펙토링 6장 p147_p158
리펙토링 6장 p147_p158리펙토링 6장 p147_p158
리펙토링 6장 p147_p158Heo Seungwook
 
DevRookie 리펙터링.pptx
DevRookie 리펙터링.pptxDevRookie 리펙터링.pptx
DevRookie 리펙터링.pptxMUUMUMUMU
 
[아꿈사] The C++ Programming Language 13장 템플릿
[아꿈사] The C++ Programming Language 13장 템플릿[아꿈사] The C++ Programming Language 13장 템플릿
[아꿈사] The C++ Programming Language 13장 템플릿해강
 
[스프링 스터디 3일차] @MVC
[스프링 스터디 3일차] @MVC[스프링 스터디 3일차] @MVC
[스프링 스터디 3일차] @MVCAnselmKim
 
Chapter 8 - optimization for training deep models
Chapter 8 - optimization for training deep modelsChapter 8 - optimization for training deep models
Chapter 8 - optimization for training deep modelsKyeongUkJang
 
Refactoring tutorial 1주차[refactoring 개요]
Refactoring tutorial 1주차[refactoring 개요]Refactoring tutorial 1주차[refactoring 개요]
Refactoring tutorial 1주차[refactoring 개요]bbongcsu
 
Refactoring tutorial
Refactoring tutorialRefactoring tutorial
Refactoring tutorialBingu Shim
 
Refactoring Tutorial 1주차[ Refactoring 개요]
Refactoring  Tutorial 1주차[ Refactoring 개요]Refactoring  Tutorial 1주차[ Refactoring 개요]
Refactoring Tutorial 1주차[ Refactoring 개요]Bingu Shim
 
Refactoring Tutorial 1주차[ Refactoring 개요]
Refactoring  Tutorial 1주차[ Refactoring 개요]Refactoring  Tutorial 1주차[ Refactoring 개요]
Refactoring Tutorial 1주차[ Refactoring 개요]Bingu Shim
 
리펙토링 11장 p389_p400
리펙토링 11장 p389_p400리펙토링 11장 p389_p400
리펙토링 11장 p389_p400Heo Seungwook
 
Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기Daum DNA
 
Effective c++ 4
Effective c++ 4Effective c++ 4
Effective c++ 4현찬 양
 

Semelhante a Refactoring ch6 (16)

리펙토링 6장 p147_p158
리펙토링 6장 p147_p158리펙토링 6장 p147_p158
리펙토링 6장 p147_p158
 
DevRookie 리펙터링.pptx
DevRookie 리펙터링.pptxDevRookie 리펙터링.pptx
DevRookie 리펙터링.pptx
 
[아꿈사] The C++ Programming Language 13장 템플릿
[아꿈사] The C++ Programming Language 13장 템플릿[아꿈사] The C++ Programming Language 13장 템플릿
[아꿈사] The C++ Programming Language 13장 템플릿
 
[스프링 스터디 3일차] @MVC
[스프링 스터디 3일차] @MVC[스프링 스터디 3일차] @MVC
[스프링 스터디 3일차] @MVC
 
Chapter 8 - optimization for training deep models
Chapter 8 - optimization for training deep modelsChapter 8 - optimization for training deep models
Chapter 8 - optimization for training deep models
 
Refactoring tutorial 1주차[refactoring 개요]
Refactoring tutorial 1주차[refactoring 개요]Refactoring tutorial 1주차[refactoring 개요]
Refactoring tutorial 1주차[refactoring 개요]
 
Refactoring tutorial
Refactoring tutorialRefactoring tutorial
Refactoring tutorial
 
Refactoring Tutorial 1주차[ Refactoring 개요]
Refactoring  Tutorial 1주차[ Refactoring 개요]Refactoring  Tutorial 1주차[ Refactoring 개요]
Refactoring Tutorial 1주차[ Refactoring 개요]
 
Refactoring Tutorial 1주차[ Refactoring 개요]
Refactoring  Tutorial 1주차[ Refactoring 개요]Refactoring  Tutorial 1주차[ Refactoring 개요]
Refactoring Tutorial 1주차[ Refactoring 개요]
 
리펙토링 11장 p389_p400
리펙토링 11장 p389_p400리펙토링 11장 p389_p400
리펙토링 11장 p389_p400
 
Annotation
AnnotationAnnotation
Annotation
 
Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기
 
Refactoring
RefactoringRefactoring
Refactoring
 
Refactoring
RefactoringRefactoring
Refactoring
 
EC 789
EC 789EC 789
EC 789
 
Effective c++ 4
Effective c++ 4Effective c++ 4
Effective c++ 4
 

Refactoring ch6

  • 2. Contents  Extract Method  Inline Method  Inline Temp  Replace Temp with Query  Introduce Explaing Variable  Split Temporary Vairable  Remove Assigments to Parameters  Replace Method with Method Object  Substitue Algorithm
  • 3. Extract Method메소드 추출 - 메소드의 길이가 너무 길 때 - 코드에 주석을 달아야 할 때 - 메소드를 분리하자. 단, 메소드의 이름은 메서드의 목적에 부합하도록 작성
  • 4. Extract Method 메소드추출 Example1. 지역변수 사용안함 : 단순히 Method로 분리
  • 5. Extract Method 메소드추출 Example2. 지역변수 사용 : 변수를 생성한 Method에 Parameter로 전달
  • 6. Extract Method 메소드추출 Example3. 지역변수를 사용, 지역변수를 다시 대입(1)
  • 7. Extract Method 메소드추출 Example3. 지역변수를 사용, 지역변수를 다시 대입(2)
  • 8. Inline Method 메서드 내용 직접 삽입 - Method 기능이 단순해서 메서드명만 봐도 너무 뻔할 땐 메서드를 합쳐버리자 - Extract Method와 반대되는 방법
  • 9. Inline Temp 임시변수 내용 직접 삽입 - 임시변수로 인해 다른 리팩토링이 힘들 땐 - 임시변수를 삭제하고 임시변수를 사용하는 부분을 수식으로 치환
  • 10. Replace Temp with Query 임시변수를 메서드 호출로 전환 - 수식의 결과를 저장하는 임시변수가 있을 땐 그 수식을 메서드로 만들자 - 중복되는 코드로 인한 성능저하는 최적화 추후에 과정에서 해결 //basePrice 변수 삭제
  • 11. Replace Temp with Query 임시변수를 메서드 호출로 전환 - Tip : 임시변수를 final로 선언 후 컴파일해서 그 임시변수들이 값을 한번만 대입받는지 시험
  • 12. Introduce Explaining Variable직관적 임시변수 사용 - 사용된 수식이 복잡할 땐 수식의 결과나 수식의 일부분을 임시변수에 저장하자. //수식이 복잡함..
  • 13. Introduce Explaining Variable 직관적 임시변수 사용 - 위의 예제는 Method Extract 기법을 사용해도 된다. - Extract Method 기법 적용이 더 어렵거나 복잡할 때만 I.E.V 방법 적용할 것
  • 14. Split Temporary Variable임시변수 분리 - 임시변수를 하나를 여러 용도로 사용하지 말자. //acc 변수에 값을 재할당하고 있음 //임시 변수에 final을 사용하여 값의 재할당을 방지
  • 15. Remove Assignments to Parameters매개변수로의 값 대입 제거 - 파라미터로 받은 변수의 값을 변경하지 말자 - 메서드 안에서의 값의 변화는 호출한 루틴에 반영되지 않는다.(call by value) - Tip. 이 방법을 강제적용하기 위해 final 키워드를 사용 //때로는 매개변수에 final을 사용하여 값의 재할당을 방지할 수 있음. - 객체를 매개변수로 사용할 때 아래와 같은 방식은 절대 사용하지 말자(Call by reference)
  • 16. Replace Method with Method Object메서드를 매서드 객체로 전환 - 지역변수 때문에 메서드 추출(R.T.Q) 적용이 어려운 메서드는 그 메서드 자체를 객체로 전환 - 지역변수를 전환한 객체의 필드로 만들고 그 메서드를 객체안의 여러 메서드로 쪼개자 - Pros. 손쉽게 Extract Method 적용 가능 //지역변수를 객체의 필드로 정의 //Method Extract
  • 17. Substitute Alogorithm알고리즘 전환 - 쉽고/편한 알고리즘으로 교체