SlideShare une entreprise Scribd logo
1  sur  14
Télécharger pour lire hors ligne
Refactoring 리팩토링
10장
 - Replace Error Code with Exception
 - Replace Exception with Test
 - Pull Up Field



               아꿈사   http://cafe.naver.com/architect1
               TTF   http://www.npteam.net
Replace Error Code with Exception
■ 메소드가 에러를 나타내는 특별한 코드를 가지고
  있다면, 대신 예외를 던져라.
Replace Error Code with Exception
■ 동기
 - Unix와 C에 기초한 시스템은 리턴코드를 사용
 - 자바는 예외(exception)를 사용한다.
    일반적인 처리과정과 예외 처리 과정의 분리
    프로그램을 이해하기 쉽게 한다.

■ C++에서는 Exception보다는 ASSERT 구문을 활용
 - 디버그 모드에서는 ASSERT를 활용하고,
 - 릴리스 모드에서는 Minidump를 활용한다.

       예외를 사용해서 일반적인 처리과정과,
          예외 처리 과정을 분리한다.
Replace Error Code with Exception
■ 젃차 - 01
 - 예외가 검사되어야 하는지(checked exception)
   말아야 하는지(unchecked exception)를 결정

  checked exception   : 컴파일러가 명시적으로
                        예외처리 요구
  unchecked exception : 컴파일러가 명시적으로
                        예외처리를 요구하지 않음

   호출부가 호출젂에 조건을 테스트하려면,
    비검사 예외(unchecked exception)로 처리
    (테스트 중에 예외가 발생하지 않도록!)
Replace Error Code with Exception
■ 젃차 - 02
 - 호출부를 모두 찾아서 예외를 사용하도록
   조정한다.
    비검사 예외라면, 호출하는 부분에서
     메소드를 호출하기 젂에 검사를 한다.
    검사 예외라면, 호출하는 부분에서
     try 블록안에서 메소드를 호출하도록
     조정한다.

 - 새로운 용법을 반영하도록 메소드의 시그너처를
   바꿔라.
Replace Error Code with Exception
■ 예제
 - 이 코드가 예외를 사용하도록 바꾸기 위해서
   검사 예외를 사용할지, 비검사 예외를 사용할지
   먼저 결정한다.
             호출부의 책임인 경우
              인출하기 젂에 잒액 검사
               (비검사 예외)

                인출 루틴의 책임인 경우
                 인터페이스에 예외를
                  선언한다.
                  (검사 예외)
Replace Exception with Test
■ 호출부에서 먼저 검사할 수 있는 조건에 대해
  예외를 던지고 있다면,
  호출부가 먼저 검사하도록 바꿔라.
Replace Exception with Test
■ 동기
 - 예외는 복잡한 코드를 피하게 해 준다.

 - 예외는 예외적인 동작(예상치 못한 에러)에
   사용되어야 한다.

 - 예외가 조건 테스트를 대신하는 역할을 하면
   안 된다.


  예외는 조건 테스트를 하는 역할이 아니라,
    예외적인 동작에서 사용되어야 한다.
Replace Exception with Test
■ 젃차
 - catch 블록의 코드를 If문의 적당한 부분에
   복사한다.

 - catch 블록에 assertion을 추가해서
   catch 블록이 실행되고 있는지를 확인한다.

 - 컴파일, 테스트를 한다.

 - catch 블록을 제거하고, try 블록을 제거한다.

 - 컴파일, 테스트를 한다.
Pull Up Field
■ 두 서브클래스가 동일한 필드를 가지고 있다면,
  그 필드를 수퍼 클래스로 옮겨라.
Pull Up Field
■ 동기
 - 서브 클래스들이 중복된 기능을 가지고 있는
   경우가 발견된다.

 - 각 서브 클래스의 필드가 비슷한 방법으로
   사용된다면 필드를 일반화 할 수 있다.
   (일반화 : 수퍼클래스로 옮기는 것)


   중복된 데이터(필드) 정의를 없애고,
필드를 사용하는 메소드를 수퍼 클래스로 옮긴다.
Pull Up Field
■ 젃차 - 01
 - 대상 필드들이 동일한 방법으로 사용되는지
   조사한다.

 - 필드 이름이 동일하지 않으면,
   수퍼클래스에서 사용할 필드 이름으로 변경한다.

 - 컴파일, 테스트를 한다.

 - 수퍼 클래스에 새로운 필드를 만든다.
Pull Up Field
■ 젃차 - 02
 - 서브 클래스의 필드를 지운다.

 - 컴파일, 테스트를 한다.

 - 새로운 필드에 Self Encapsulate Field(205)를
   사용하는 것을 고려한다.
리팩토링 10장 p357_p369

Contenu connexe

En vedette

Cruise control net_and_terminal_with_gamedev
Cruise control net_and_terminal_with_gamedevCruise control net_and_terminal_with_gamedev
Cruise control net_and_terminal_with_gamedevHeo Seungwook
 
리펙토링 11장 p389_p400
리펙토링 11장 p389_p400리펙토링 11장 p389_p400
리펙토링 11장 p389_p400Heo Seungwook
 
리펙토링 6장 p147_p158
리펙토링 6장 p147_p158리펙토링 6장 p147_p158
리펙토링 6장 p147_p158Heo Seungwook
 
리펙토링 4장 테스트만들기
리펙토링 4장 테스트만들기리펙토링 4장 테스트만들기
리펙토링 4장 테스트만들기Heo Seungwook
 
리펙토링 10장 p316_p324
리펙토링 10장 p316_p324리펙토링 10장 p316_p324
리펙토링 10장 p316_p324Heo Seungwook
 
2010 연말행사 온라인스터디
2010 연말행사 온라인스터디2010 연말행사 온라인스터디
2010 연말행사 온라인스터디Heo Seungwook
 
Master slave pattern
Master slave patternMaster slave pattern
Master slave patternHeo Seungwook
 
프로그램은 왜 실패하는가
프로그램은 왜 실패하는가프로그램은 왜 실패하는가
프로그램은 왜 실패하는가Heo Seungwook
 
Client dispatcher server_pattern
Client dispatcher server_patternClient dispatcher server_pattern
Client dispatcher server_patternHeo Seungwook
 

En vedette (11)

Cruise control net_and_terminal_with_gamedev
Cruise control net_and_terminal_with_gamedevCruise control net_and_terminal_with_gamedev
Cruise control net_and_terminal_with_gamedev
 
리펙토링 11장 p389_p400
리펙토링 11장 p389_p400리펙토링 11장 p389_p400
리펙토링 11장 p389_p400
 
Pac pattern
Pac patternPac pattern
Pac pattern
 
리펙토링 6장 p147_p158
리펙토링 6장 p147_p158리펙토링 6장 p147_p158
리펙토링 6장 p147_p158
 
리펙토링 4장 테스트만들기
리펙토링 4장 테스트만들기리펙토링 4장 테스트만들기
리펙토링 4장 테스트만들기
 
리펙토링 10장 p316_p324
리펙토링 10장 p316_p324리펙토링 10장 p316_p324
리펙토링 10장 p316_p324
 
2010 연말행사 온라인스터디
2010 연말행사 온라인스터디2010 연말행사 온라인스터디
2010 연말행사 온라인스터디
 
Master slave pattern
Master slave patternMaster slave pattern
Master slave pattern
 
프로그램은 왜 실패하는가
프로그램은 왜 실패하는가프로그램은 왜 실패하는가
프로그램은 왜 실패하는가
 
Client dispatcher server_pattern
Client dispatcher server_patternClient dispatcher server_pattern
Client dispatcher server_pattern
 
Mvc pattern
Mvc patternMvc pattern
Mvc pattern
 

리팩토링 10장 p357_p369

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