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_p158
Heo Seungwook
 
[아꿈사] The C++ Programming Language 13장 템플릿
[아꿈사] The C++ Programming Language 13장 템플릿[아꿈사] The C++ Programming Language 13장 템플릿
[아꿈사] The C++ Programming Language 13장 템플릿
해강
 
Refactoring tutorial
Refactoring tutorialRefactoring tutorial
Refactoring tutorial
Bingu Shim
 
리펙토링 11장 p389_p400
리펙토링 11장 p389_p400리펙토링 11장 p389_p400
리펙토링 11장 p389_p400
Heo 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
 

Último

파일 업로드(Kitworks Team Study 유현주 발표자료 240510)
파일 업로드(Kitworks Team Study 유현주 발표자료 240510)파일 업로드(Kitworks Team Study 유현주 발표자료 240510)
파일 업로드(Kitworks Team Study 유현주 발표자료 240510)
Wonjun Hwang
 
Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)
Wonjun Hwang
 

Último (6)

오픈소스 위험 관리 및 공급망 보안 솔루션 'Checkmarx SCA' 소개자료
오픈소스 위험 관리 및 공급망 보안 솔루션 'Checkmarx SCA' 소개자료오픈소스 위험 관리 및 공급망 보안 솔루션 'Checkmarx SCA' 소개자료
오픈소스 위험 관리 및 공급망 보안 솔루션 'Checkmarx SCA' 소개자료
 
클라우드 애플리케이션 보안 플랫폼 'Checkmarx One' 소개자료
클라우드 애플리케이션 보안 플랫폼 'Checkmarx One' 소개자료클라우드 애플리케이션 보안 플랫폼 'Checkmarx One' 소개자료
클라우드 애플리케이션 보안 플랫폼 'Checkmarx One' 소개자료
 
[OpenLAB] AWS reInvent를 통해 바라본 글로벌 Cloud 기술동향.pdf
[OpenLAB] AWS reInvent를 통해 바라본 글로벌 Cloud 기술동향.pdf[OpenLAB] AWS reInvent를 통해 바라본 글로벌 Cloud 기술동향.pdf
[OpenLAB] AWS reInvent를 통해 바라본 글로벌 Cloud 기술동향.pdf
 
파일 업로드(Kitworks Team Study 유현주 발표자료 240510)
파일 업로드(Kitworks Team Study 유현주 발표자료 240510)파일 업로드(Kitworks Team Study 유현주 발표자료 240510)
파일 업로드(Kitworks Team Study 유현주 발표자료 240510)
 
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
 
Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)
 

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알고리즘 전환 - 쉽고/편한 알고리즘으로 교체