SlideShare una empresa de Scribd logo
1 de 17
Refactoring 6장 Remove Assignment to Parameters Replace Method with Method Object Substitute Algorithm 아꿈사http://cafe.naver.com/architect1 김용락  http://blog.naver.com/subhill
Remove Assignments to Parameters 파라미터에 값을 대입하는 코드가 있으면,대신 임시변수를 사용하도록 하라.
Remove Assignments to Parameters 파라미터에 값을 대입하는 코드가 있으면,대신 임시변수를 사용하도록 하라. 동기 파라미터로 넘겨진 객체에 대한 작업은 OK! 파라미터가 완전히 다른 객체를 참조하도록 하는 것에는 반대! 이유 명확하지 않다. 값에 의한 전달(pass by value)와 참조에 의한 전달(pass by reference)를 혼동하기 때문
Remove Assignments to Parameters 파라미터에 값을 대입하는 코드가 있으면,대신 임시변수를 사용하도록 하라. 따라서 파라미터는전달된 그대로 쓰는 것이 훨씬 명확하며 일관적인 사용법이다. 파라미터에값을 대입해서는 안되고 이런 코드를 보면 Remove Assignments to Parameters 를 사용하여 제거하자
Remove Assignments to Parameters 파라미터에 값을 대입하는 코드가 있으면,대신 임시변수를 사용하도록 하라. 절차 파라미터를 위한 임시 변수를 만든다. 파라미터에 값을 대입한 코드 이후에서 파라미터에 대한 참조를 임시변수로 바꾼다. 파라미터에 대입하는 값을 임시변수에 대입한다 컴파일과 테스트.
Remove Assignments to Parameters 파라미터에 값을 대입하는 코드가 있으면,대신 임시변수를 사용하도록 하라. 주의 참조에 의한 호출일 경우(call by reference)인 경우 메소드 호출 부분에서 파라미터가 계속 사용되는지 살펴보라. 또한 거기에 얼마나 많은 참조에 의한 호출파라미터에 값이 대입되고 사용되는지도 본다. 리턴값으로하나의 값을 넘길 수 있도록 하라. 만약 하나 이상 있다면 데이터 덩어리를 객체로 만들 수 있는지, 또는 별도의 메소드로 만들 수 있는지 보라.-> Replace Method with Method Object(163) 활용.
Remove Assignments to Parameters 파라미터에 값을 대입하는 코드가 있으면,대신 임시변수를 사용하도록 하라. 예제 2 파라미터를Final로 선언하여 관례를 따르도록 강제할 수도 있다. 하지만 실제로 저자는 파라미터에final 쓰지 않는다. 짧은 메소드에 대해서는 코드를 명확하게 하는데 별로 큰 도움이 안된다. 하지만 메소드가길 경우 다른 코드가 파라미터를 변경하는지 보기 위해서는 쓰기도 한다.
Remove Assignments to Parameters 파라미터에 값을 대입하는 코드가 있으면,대신 임시변수를 사용하도록 하라. 자바에서 값에 의한 전달(Pass By Value) 자바는 엄격하게 모든 경우에 값에 의한 전달을 사용
Remove Assignments to Parameters 파라미터에 값을 대입하는 코드가 있으면,대신 임시변수를 사용하도록 하라. 자바에서 값에 의한 전달(Pass By Value) 본질적으로 객체 참조가 값으로 넘겨진다. 객체의 속성을 변경하는 것은 가능 파라미터에  다른 값을 대입하는 것은 고려안함
ReplaceMethod with Method Object 지역변수 때문에 Extract Method를  적용할 수 없는 긴 메소드의 경우 메소드를 그 자신을 위한 객체로 바꿔 모든 지역변수가 그 객체의 필드가 되도록 한다.  이렇게 하면 메소드를 같은 객체 안의 여러 메소드로 분해할 수 있다. 한줄 요약 메소드를(메소드에 있는 모든 지역 변수를 담는)객체로 바꿔라.
ReplaceMethod with Method Object 메소드를(메소드에 있는 모든 지역 변수를 담는) 객체로 바꿔라. 동기 작은 메소드의 아름다움 강조. 많은 지역 변수는 메소드를 분해할 때 어려움을 준다 이런 경우  Replace Method with Method Object를 사용하여 이런 모든 지역변수를 메소드 객체로 바꾸어 버린다.그 다음 새로 만들어진 객체를 Extract Method를 이용하여 원래의 메소드로 분해할 수 있다.
ReplaceMethod with Method Object 메소드를(메소드에 있는 모든 지역 변수를 담는) 객체로 바꿔라. 절차 메소드의 이름을 따 새로운 클래스 생성. 새로운 클래스에 Final 필드로 원래 메소드의 객체를 저장 메소드에서 사용되는 임시변수와 파라미터를 위한 필드 생성 새로운 클래스의 생성자에서 소스객체와 파라미터를 취함. 새로운 클래스에 Compute라는 이름의 메소드를 만들어준다.
ReplaceMethod with Method Object 메소드를(메소드에 있는 모든 지역 변수를 담는) 객체로 바꿔라. 절차 원래의 메소드를Compute에 복사. 원래의 객체에 있는 메소드를 사용하는 경우에는 소스 객체 필드를 사용하도록 바꿈. 컴파일 새로운 클래스의 객체를 만들고 원래의 메소드를새로만든 객체의 Compute메소드를 호출하도록 바꿈. 이제 Extract Method를 사용하여 마음대로 Refactoring.
Substitute Algorithm 알고리즘을 보다 명확한 것으로 바꾸고 싶을 때는, 메소드의 몸체를 새로운 알고리즘으로 바꾼다.
Substitute Algorithm 알고리즘을 보다 명확한 것으로 바꾸고 싶을 때는, 메소드의 몸체를 새로운 알고리즘으로 바꾼다. ,[object Object],동기 더 명확한 방법을 찾게 되었을 때 중복되는 기능을 지원하는 라이브러리를 사용할 때 조금 다르게 처리하기 위해 알고리즘을 바꾸고 싶을 때 크고 복잡한 알고리즘을 해야 하는 경우.
Substitute Algorithm 알고리즘을 보다 명확한 것으로 바꾸고 싶을 때는, 메소드의 몸체를 새로운 알고리즘으로 바꾼다. 절차 대체 알고리즘 준비. 적용하여 컴파일 결과 같다면 끝 결과 다르면 예전 알고리즘 이용하여 디버깅.
끝.

Más contenido relacionado

Destacado (8)

Refactoring
RefactoringRefactoring
Refactoring
 
Overview of our products
Overview of our productsOverview of our products
Overview of our products
 
Halo Headphones
Halo  HeadphonesHalo  Headphones
Halo Headphones
 
About Slice
About SliceAbout Slice
About Slice
 
Twitter juist
Twitter juistTwitter juist
Twitter juist
 
Light
LightLight
Light
 
Refactoring
RefactoringRefactoring
Refactoring
 
Presentatie for "Studiemiddag Linked Data Archieven"
Presentatie for "Studiemiddag Linked Data Archieven"Presentatie for "Studiemiddag Linked Data Archieven"
Presentatie for "Studiemiddag Linked Data Archieven"
 

Similar a Refactoring

Refactoring tutorial
Refactoring tutorialRefactoring tutorial
Refactoring tutorial
Bingu Shim
 
Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기
Daum DNA
 

Similar a Refactoring (17)

Python 이해하기 20160815
Python 이해하기 20160815Python 이해하기 20160815
Python 이해하기 20160815
 
[스프링 스터디 3일차] @MVC
[스프링 스터디 3일차] @MVC[스프링 스터디 3일차] @MVC
[스프링 스터디 3일차] @MVC
 
[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java
 
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 개요]
 
Refactoring tutorial
Refactoring tutorialRefactoring tutorial
Refactoring tutorial
 
Refactoring tutorial 1주차[refactoring 개요]
Refactoring tutorial 1주차[refactoring 개요]Refactoring tutorial 1주차[refactoring 개요]
Refactoring tutorial 1주차[refactoring 개요]
 
[스프링 스터디 1일차] 템플릿
[스프링 스터디 1일차] 템플릿[스프링 스터디 1일차] 템플릿
[스프링 스터디 1일차] 템플릿
 
Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기
 
Scala variable
Scala variableScala variable
Scala variable
 
Scala syntax function
Scala syntax functionScala syntax function
Scala syntax function
 
DevRookie 리펙터링.pptx
DevRookie 리펙터링.pptxDevRookie 리펙터링.pptx
DevRookie 리펙터링.pptx
 
Scala nested function generic function
Scala nested function generic functionScala nested function generic function
Scala nested function generic function
 
Scala 기초 (3)
Scala 기초 (3)Scala 기초 (3)
Scala 기초 (3)
 
파이썬 기초
파이썬 기초 파이썬 기초
파이썬 기초
 
2014-15 Intermediate C++ Study #7
2014-15 Intermediate C++ Study #72014-15 Intermediate C++ Study #7
2014-15 Intermediate C++ Study #7
 
Scala namespace scope
Scala namespace scopeScala namespace scope
Scala namespace scope
 

Refactoring

  • 1. Refactoring 6장 Remove Assignment to Parameters Replace Method with Method Object Substitute Algorithm 아꿈사http://cafe.naver.com/architect1 김용락 http://blog.naver.com/subhill
  • 2. Remove Assignments to Parameters 파라미터에 값을 대입하는 코드가 있으면,대신 임시변수를 사용하도록 하라.
  • 3. Remove Assignments to Parameters 파라미터에 값을 대입하는 코드가 있으면,대신 임시변수를 사용하도록 하라. 동기 파라미터로 넘겨진 객체에 대한 작업은 OK! 파라미터가 완전히 다른 객체를 참조하도록 하는 것에는 반대! 이유 명확하지 않다. 값에 의한 전달(pass by value)와 참조에 의한 전달(pass by reference)를 혼동하기 때문
  • 4. Remove Assignments to Parameters 파라미터에 값을 대입하는 코드가 있으면,대신 임시변수를 사용하도록 하라. 따라서 파라미터는전달된 그대로 쓰는 것이 훨씬 명확하며 일관적인 사용법이다. 파라미터에값을 대입해서는 안되고 이런 코드를 보면 Remove Assignments to Parameters 를 사용하여 제거하자
  • 5. Remove Assignments to Parameters 파라미터에 값을 대입하는 코드가 있으면,대신 임시변수를 사용하도록 하라. 절차 파라미터를 위한 임시 변수를 만든다. 파라미터에 값을 대입한 코드 이후에서 파라미터에 대한 참조를 임시변수로 바꾼다. 파라미터에 대입하는 값을 임시변수에 대입한다 컴파일과 테스트.
  • 6. Remove Assignments to Parameters 파라미터에 값을 대입하는 코드가 있으면,대신 임시변수를 사용하도록 하라. 주의 참조에 의한 호출일 경우(call by reference)인 경우 메소드 호출 부분에서 파라미터가 계속 사용되는지 살펴보라. 또한 거기에 얼마나 많은 참조에 의한 호출파라미터에 값이 대입되고 사용되는지도 본다. 리턴값으로하나의 값을 넘길 수 있도록 하라. 만약 하나 이상 있다면 데이터 덩어리를 객체로 만들 수 있는지, 또는 별도의 메소드로 만들 수 있는지 보라.-> Replace Method with Method Object(163) 활용.
  • 7. Remove Assignments to Parameters 파라미터에 값을 대입하는 코드가 있으면,대신 임시변수를 사용하도록 하라. 예제 2 파라미터를Final로 선언하여 관례를 따르도록 강제할 수도 있다. 하지만 실제로 저자는 파라미터에final 쓰지 않는다. 짧은 메소드에 대해서는 코드를 명확하게 하는데 별로 큰 도움이 안된다. 하지만 메소드가길 경우 다른 코드가 파라미터를 변경하는지 보기 위해서는 쓰기도 한다.
  • 8. Remove Assignments to Parameters 파라미터에 값을 대입하는 코드가 있으면,대신 임시변수를 사용하도록 하라. 자바에서 값에 의한 전달(Pass By Value) 자바는 엄격하게 모든 경우에 값에 의한 전달을 사용
  • 9. Remove Assignments to Parameters 파라미터에 값을 대입하는 코드가 있으면,대신 임시변수를 사용하도록 하라. 자바에서 값에 의한 전달(Pass By Value) 본질적으로 객체 참조가 값으로 넘겨진다. 객체의 속성을 변경하는 것은 가능 파라미터에 다른 값을 대입하는 것은 고려안함
  • 10. ReplaceMethod with Method Object 지역변수 때문에 Extract Method를 적용할 수 없는 긴 메소드의 경우 메소드를 그 자신을 위한 객체로 바꿔 모든 지역변수가 그 객체의 필드가 되도록 한다. 이렇게 하면 메소드를 같은 객체 안의 여러 메소드로 분해할 수 있다. 한줄 요약 메소드를(메소드에 있는 모든 지역 변수를 담는)객체로 바꿔라.
  • 11. ReplaceMethod with Method Object 메소드를(메소드에 있는 모든 지역 변수를 담는) 객체로 바꿔라. 동기 작은 메소드의 아름다움 강조. 많은 지역 변수는 메소드를 분해할 때 어려움을 준다 이런 경우  Replace Method with Method Object를 사용하여 이런 모든 지역변수를 메소드 객체로 바꾸어 버린다.그 다음 새로 만들어진 객체를 Extract Method를 이용하여 원래의 메소드로 분해할 수 있다.
  • 12. ReplaceMethod with Method Object 메소드를(메소드에 있는 모든 지역 변수를 담는) 객체로 바꿔라. 절차 메소드의 이름을 따 새로운 클래스 생성. 새로운 클래스에 Final 필드로 원래 메소드의 객체를 저장 메소드에서 사용되는 임시변수와 파라미터를 위한 필드 생성 새로운 클래스의 생성자에서 소스객체와 파라미터를 취함. 새로운 클래스에 Compute라는 이름의 메소드를 만들어준다.
  • 13. ReplaceMethod with Method Object 메소드를(메소드에 있는 모든 지역 변수를 담는) 객체로 바꿔라. 절차 원래의 메소드를Compute에 복사. 원래의 객체에 있는 메소드를 사용하는 경우에는 소스 객체 필드를 사용하도록 바꿈. 컴파일 새로운 클래스의 객체를 만들고 원래의 메소드를새로만든 객체의 Compute메소드를 호출하도록 바꿈. 이제 Extract Method를 사용하여 마음대로 Refactoring.
  • 14. Substitute Algorithm 알고리즘을 보다 명확한 것으로 바꾸고 싶을 때는, 메소드의 몸체를 새로운 알고리즘으로 바꾼다.
  • 15.
  • 16. Substitute Algorithm 알고리즘을 보다 명확한 것으로 바꾸고 싶을 때는, 메소드의 몸체를 새로운 알고리즘으로 바꾼다. 절차 대체 알고리즘 준비. 적용하여 컴파일 결과 같다면 끝 결과 다르면 예전 알고리즘 이용하여 디버깅.
  • 17. 끝.