리팩토링 10장 p357_p369

1,081 views
1,024 views

Published on

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,081
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
12
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

리팩토링 10장 p357_p369

  1. 1. Refactoring 리팩토링10장 - Replace Error Code with Exception - Replace Exception with Test - Pull Up Field 아꿈사 http://cafe.naver.com/architect1 TTF http://www.npteam.net
  2. 2. Replace Error Code with Exception■ 메소드가 에러를 나타내는 특별한 코드를 가지고 있다면, 대신 예외를 던져라.
  3. 3. Replace Error Code with Exception■ 동기 - Unix와 C에 기초한 시스템은 리턴코드를 사용 - 자바는 예외(exception)를 사용한다.  일반적인 처리과정과 예외 처리 과정의 분리  프로그램을 이해하기 쉽게 한다.■ C++에서는 Exception보다는 ASSERT 구문을 활용 - 디버그 모드에서는 ASSERT를 활용하고, - 릴리스 모드에서는 Minidump를 활용한다. 예외를 사용해서 일반적인 처리과정과, 예외 처리 과정을 분리한다.
  4. 4. Replace Error Code with Exception■ 젃차 - 01 - 예외가 검사되어야 하는지(checked exception) 말아야 하는지(unchecked exception)를 결정 checked exception : 컴파일러가 명시적으로 예외처리 요구 unchecked exception : 컴파일러가 명시적으로 예외처리를 요구하지 않음  호출부가 호출젂에 조건을 테스트하려면, 비검사 예외(unchecked exception)로 처리 (테스트 중에 예외가 발생하지 않도록!)
  5. 5. Replace Error Code with Exception■ 젃차 - 02 - 호출부를 모두 찾아서 예외를 사용하도록 조정한다.  비검사 예외라면, 호출하는 부분에서 메소드를 호출하기 젂에 검사를 한다.  검사 예외라면, 호출하는 부분에서 try 블록안에서 메소드를 호출하도록 조정한다. - 새로운 용법을 반영하도록 메소드의 시그너처를 바꿔라.
  6. 6. Replace Error Code with Exception■ 예제 - 이 코드가 예외를 사용하도록 바꾸기 위해서 검사 예외를 사용할지, 비검사 예외를 사용할지 먼저 결정한다. 호출부의 책임인 경우  인출하기 젂에 잒액 검사 (비검사 예외) 인출 루틴의 책임인 경우  인터페이스에 예외를 선언한다. (검사 예외)
  7. 7. Replace Exception with Test■ 호출부에서 먼저 검사할 수 있는 조건에 대해 예외를 던지고 있다면, 호출부가 먼저 검사하도록 바꿔라.
  8. 8. Replace Exception with Test■ 동기 - 예외는 복잡한 코드를 피하게 해 준다. - 예외는 예외적인 동작(예상치 못한 에러)에 사용되어야 한다. - 예외가 조건 테스트를 대신하는 역할을 하면 안 된다. 예외는 조건 테스트를 하는 역할이 아니라, 예외적인 동작에서 사용되어야 한다.
  9. 9. Replace Exception with Test■ 젃차 - catch 블록의 코드를 If문의 적당한 부분에 복사한다. - catch 블록에 assertion을 추가해서 catch 블록이 실행되고 있는지를 확인한다. - 컴파일, 테스트를 한다. - catch 블록을 제거하고, try 블록을 제거한다. - 컴파일, 테스트를 한다.
  10. 10. Pull Up Field■ 두 서브클래스가 동일한 필드를 가지고 있다면, 그 필드를 수퍼 클래스로 옮겨라.
  11. 11. Pull Up Field■ 동기 - 서브 클래스들이 중복된 기능을 가지고 있는 경우가 발견된다. - 각 서브 클래스의 필드가 비슷한 방법으로 사용된다면 필드를 일반화 할 수 있다. (일반화 : 수퍼클래스로 옮기는 것) 중복된 데이터(필드) 정의를 없애고,필드를 사용하는 메소드를 수퍼 클래스로 옮긴다.
  12. 12. Pull Up Field■ 젃차 - 01 - 대상 필드들이 동일한 방법으로 사용되는지 조사한다. - 필드 이름이 동일하지 않으면, 수퍼클래스에서 사용할 필드 이름으로 변경한다. - 컴파일, 테스트를 한다. - 수퍼 클래스에 새로운 필드를 만든다.
  13. 13. Pull Up Field■ 젃차 - 02 - 서브 클래스의 필드를 지운다. - 컴파일, 테스트를 한다. - 새로운 필드에 Self Encapsulate Field(205)를 사용하는 것을 고려한다.

×