Halo World

리팩토링 수행 절차 본문

개발 지식/SW ENGINEERING

리팩토링 수행 절차

_Yeony 2017. 6. 2. 16:46

 

| 1. 리팩토링할 대상을 선정한다.

 

 처음부터 모든 프로그램을 리팩토링 할 수는 없다. 가장 중요한, 자주 추가 및 변경되는 프로그램을 선정한다.

 

  > 반복되는 코드

  > 긴 메소드

  > 큰 클래스

  > 긴 매개변수 목록

  > 확산을 위한 변경

    : 한 클래스의 목적이 여러 부분에서 사용되고, 각각의 목적에 따라서 수정이 이루어져야 하는 경우 분리하는 것이 좋음

  > 샷건(산탄총) 수술

    : 확산을 위한 변경과 같아보이지만, 하나의 수정을 위해서 여러 클래스를 건드려야 할 경우가 발생된다면 차후 하나의 클래스만 수정하는 것이 가능하도록 만듬

  > 기능에 대한 욕심

    : 어떤 메소드가 같은 클래스의 메소드보다, 다른 클래스의 메소드를 더 많이 사용한다면 그 메소드는 많이 사용하는 클래스로 옮기는 것이 차라리 낫다.

  > 큰 데이터 덩어리

    : 하나의 TO(Transfer Object or Value Object)를 여러 곳에서 사용하려고 덕지덕지 변수들을 추가해서 사용하는 경우가 상당히 많다. TO가 아니라 다른 클래스에서도 마찬가지이다. 필요없는 객체가 생성되지 않도록 꼭 필요한 것만 묶어서 재구성해야한다

  > 기본 자료형에 대한 집착

    : 너무 기본 자료형만 밝히지 말고 필요한 TO를 만들어서 사용하는 것이 좋다.

  > Switch 문장

    : Switch 문장을 다형성에 맞추어 중복이 최대한 발생하지 않도록 해야 한다.

  > 게으른 클래스

    : 별로 사용되지 않는 클래스 삭제

  > 추측한 것들 제거

    : 필요하 것이라고 생각해서 만든 것들 중 사용되지 않는 것 삭제

  > 임시 필드 제거

  > 메시지 연결

    : 메시지를 의미 없이 연속적으로 호출하고, 호출하고 또 호출하게 되는 것

  > 중간자적 입장

    : 클래스에 있는 메소드가 주로 다른 클래스를 참조한다면, 지나친 캡슐화가 된 것이므로 수정

  > 높은 연관성 제거

    : 두 클래스의 연관성이 너무 높으면 유지 보수할 때 위험하다

  > 하는 일은 같은데 무엇을 사용해야하는지 혼동되는 클래스

  > 약간 부족한 라이브러리

    : 제공받은 라이브러리가 부족한 부분이 있다면, 기능을 보완하는 클래스를 추가하는 것이 좋음

  > 잘못된 상속

    : 상속받은 클래스가 너무 많은 일을 하거나 복잡할 경우, 부모 클래스에게 동생을 하나 만들어 달라고 하는 것이 나음

  > 불필요한 주석 제거

 


 

 

| 2. 선정된 대상의 테스트 코드를 작성한다.

 

 리팩토링을 하기 전부터 프로그램에 오류가 있을 수도 있고, 리팩토링을 한 이후에 프로그램이 제대로 수행되는지를 점검하려면 테스트 코드를 작성하는 것은 필수이다. 리팩토링 후에 수행결과가 다르게 나온다면, 문제가 되 는 부분을 찾는데 엄청난 시간이 소요된다.

 

 

 

| 3. 코드를 분해한 후 재조립한다.

 

 나쁜 느낌이 드는 코드는 꼭 살펴보아야 한다. 누가 보더라도 직관적으로 이해가 되지 않는 코드는 문제가 있는 것이다.

 여러가지 방법을 사용해서 코드를 수정하는 작업을 수행한다

 

 > 메소드 정리

 > 객체나 클래스 사이의 이 동

 > 데이터의 재구성

 > 조건문을 이해하기 쉽게 단순화

 > 메소드 호출 단순화

 > 상속관계 재구성

 

 

 

| 4. 재조립한 코드를 테스트한다.

 

 프로그램을 재조립하고, 테스트해보지 않으면 어떻게 될지 아무도 모른다. 반드시 테스트를 수행해야 한다.

 

 

 

| 5. 3번 작업과 4번 작업을 반복한다.

 

 3번 작업과 4번 작업을 만족할 때까지 반복한다.

 

 

 

 

[출처]

http://eppffy.tistory.com/15

'개발 지식 > SW ENGINEERING' 카테고리의 다른 글

Refactoring(리팩토링)  (0) 2017.06.02