Wulin.com의 기사 소개 (www.vevb.com) : Refactoring이라는 단어는 원래 Martin Fowler와 Kent Beck에 의해 정의되었습니다. 소프트웨어의 내부 구조를 쉽게 이해하기 쉽고 소프트웨어의 가시적 동작을 변경하지 않고 소프트웨어를 쉽게 변경할 수 있도록 수정하는 수정입니다. 코드를 구성하고 버그 생성 가능성을 최소화하는 제한된 방법입니다.
때로는 프로그래머가 나에게 와서 그들이 무언가의 디자인을 좋아하지 않는다고 말하며, 우리는 오류를 수정하기 위해 포괄적 인 재구성을 제공해야합니다. 오 오. 이것은 좋은 생각처럼 들리지 않습니다. 그리고 이것은 리팩토링처럼 들리지 않습니다 ...Refactoring이라는 단어는 원래 Martin Fowler와 Kent Beck에 의해 정의되었습니다. 소프트웨어의 내부 구조를 쉽게 이해하기 쉽고 소프트웨어의 가시적 동작을 변경하지 않고 소프트웨어를 쉽게 변경할 수 있도록 수정하는 수정입니다. 코드를 구성하고 버그 생성 가능성을 최소화하는 제한된 방법입니다.
재구성의 결과는 바로 가기 메소드가 참조되고, 중복 및 데드 코드가 제거되어 설계와 논리를 더 명확하게한다는 것입니다. 프로그래밍 언어를 더 좋고 똑똑하게 사용하는 것입니다. 지금 알고있는 정보를 사용하는 이점이지만 당시 개발자는 알지 못했거나 사용하지 않았습니다. 코드를 지속적으로 단순화하여 이해하기 쉽게합니다. 지속적으로 미래의 변화를보다 쉽고 안전하게 만듭니다.
이 과정에서 버그가 발견되고 버그가 수정되었으며 이는 재구성이 아닙니다. 최적화는 재구성이 아닙니다. 예외 캡처 강화 및 예방 코드 추가는 리팩토링이 아닙니다. 코드를보다 쉽게 테스트 할 수있게하는 것은 리팩토링이 아닙니다. 리팩토링은 동일한 효과를 얻을 수 있습니다. 이 모든 것들이 유익합니다. 그러나 이것들 중 어느 것도 리팩토링이 아닙니다.
프로그래머, 특히 유지 보수 작업을 수행하는 사람들은 코드 정리가 일상적인 작업 중 하나입니다. 이것은 기본적인 작업이며 수행해야합니다. Martin Fowler et al. 코드를 리팩토링하는 모범 사례 방법을 형식화하고 아카이브 분류를 위해 공통적이고 입증 된 효과적인 리팩토링 패턴 (리팩토링 목표 및 리팩토링 단계)을 보관하는 것입니다.
리팩토링은 간단합니다. 가능한 한 코드를 작성하기 전에 테스트를 작성하면 실수를하지 못하게 할 수 있습니다. 코드에 대한 소규모, 독립적이고 안전한 구조적 조정을하고 각 조정 후 테스트하여 코드의 동작 특성을 변경하지 않도록합니다. 함수는 이전과 동일하지만 코드는 다르게 보입니다. 리팩토링 모드 및 최신 IDE 리팩토링 도구는 재 팩터를 쉽고 안전하며 저렴하게 만듭니다.
리팩토링을 위해 리팩터를 리팩토링하지 마십시오
리팩토링은 코드 변경에 도움이되는 측정 값으로 간주 될 수 있습니다. 코드 리팩토링은 코드를 변경하기 전에 수행해야하므로 코드를 이해하고 코드에 변경 사항을 도입하기가 더 쉽고 안전하게 만들 수 있습니다. 리팩토링 작업에 대한 회귀 테스트를 수행하십시오. 그런 다음 수정 또는 변경하십시오. 다시 테스트하십시오. 나중에 코드 변경 의도를 명확하게하기 위해 더 많은 코드가 리팩토링 될 수 있습니다. 다시 테스트하십시오. 재구성하고 다시 변경하십시오. 또는 변경 한 다음 리팩터.
당신은 리팩토링을 위해 리팩토링을하지 않고, 다른 일을하고 싶기 때문에 리팩토링을하고 있으며, 리팩토링은 이러한 것들을 달성하는 데 도움이 될 수 있습니다.
리팩토링의 범위는 구현 해야하는 코드 변경 또는 코드 수정에 의해 결정되어야합니다. 코드 변경을보다 안전하고 간결하게하려면 어떻게해야합니까? 다시 말해 : 리팩토링을 위해 리팩터를 리팩토링하지 마십시오. 변경하려고하지 않거나 변경하지 않을 코드를 리팩터링하지 마십시오.
이해를위한 스크래치 리팩토링 (스크래치 리팩토링)
Michael Feather의 저서 "레거시 코드와 효과적으로 작업"하는 책은 스크래치 리팩토링의 개념을 언급합니다. Martin Fowler는 그것을 이해하기 위해 리팩토링이라고 부릅니다. 이것은 당신이 이해하지 못하는 코드를 다루거나 견딜 수없는 코드를 다루는 데 사용되며, 실제로 수정하기 전에 그들이하는 일을 더 잘 이해할 수 있도록 정리하고,이 코드를 디버깅하는 데 도움이됩니다. 변수 또는 메소드의 진정한 의도를 이해하고, 이름을 바꾸고, 더 적절한 이름을 부여하고, 읽고 싶지 않은 코드를 삭제하고 (쓸모없는 조건 진술을 분해하고, 긴 프로그램을 여러 가지 이해하기 쉬운 미니 프로그램으로 분류하십시오.
이러한 변경 사항을 검토하거나 테스트하는 것에 대해 걱정하지 마십시오. 이것은 당신의 재구성을 신속하게 진행시키는 것입니다. 이것은 이러한 코드를 허용하고 그들이 당신의 뇌에서 빠르고 불완전한 프로토 타입을 생성하기 위해 어떻게 실행되는지를 허용합니다. 그것으로부터 배우고 그들을 버리십시오. 간단한 재구성을 통해 다양한 재구성 방법을 시도하고 더 많은 재구성 기술을 배울 수 있습니다. Michael Feathers는 프로세스에서 쓸모 없거나 특히 유용한 것처럼 보이는 것에주의를 기울여야한다고 제안 하여이 연습을 완료 한 후에 올바르게 작업을 수행하고 실제로 수정할 수 있습니다. 수정할 때 조금씩 만들고 방법에주의를 기울이고 수정하고 테스트 할 수 있습니다.
대규모 재건이란 무엇입니까?
코드의 간단하지만 명백한 재구성 : 복제를 제거하고 변수 및 메소드 이름을 수정 및 변경하여 더 의미있게 만들고 코드를 이해하고 재사용 할 수있는 방법을 개선하고 조건부 로직을 단순화하고 의미없는 숫자를 명명 된 변수로 바꾸고 유사한 코드를 가져옵니다. 이러한 리팩토링을 통해 코드 이해력과 유지 관리에있어 큰 보상을받을 수 있습니다.
이러한 작고 인라인 재구성과 비교하여, 더 중요한 설계 재구성은 그들과 크게 다릅니다. 이것이 Martin Fowler가 큰 재구성이라고 언급하는 것입니다. 비용이 많이 드는 변화에는 많은 기술적 위험이 있습니다. 이것은 프로그래밍 프로세스의 정리 코드 및 설계 개선이 아닙니다. 기본 재 설계입니다.
어떤 사람들은 재 설계 또는 재 작성 또는 재구성 또는 대규모 재건이라는 시스템을 재 작업하는 것을 좋아합니다. 기술적으로, 이들은 소프트웨어의 기능적 특성을 변경하지 않기 때문에 비즈니스 로직, 소프트웨어 입력 및 출력은 여전히 이전과 동일하지만 설계 및 코드 구현이 변경되었습니다. 그것과 기존의 재구성의 차이점은 다음과 같습니다. 하나는 코드를 다시 작성하고 다른 하나는 시스템을 다시 작성하는 것입니다. 단계별로 수행하는 한, 기존 시스템을 수년간 새 코드로 교체하거나 시스템 아키텍처의 대규모 변환에 갇혀 있는지 여부를 재구성이라고 할 수 있습니다.
대규모 리팩토링은 끔찍할 것입니다. 완료하는 데 몇 주, 몇 달 (또는 몇 년)이 걸릴 수 있으며 소프트웨어의 여러 부분을 변경해야합니다. 결과적으로 소프트웨어가 실행되지 않으므로 이러한 변경 사항은 여러 번 출시해야합니다. 임시 스캐 폴딩 및 해결 방법을 수행해야합니다. 특히 단락 민첩한 개발 방법을 사용할 때. 현재 Abstract By Branch와 같은 실용적인 방법은 편리하게 제공되므로 오랜 시간 동안 코드의 변경 사항을 관리하는 데 도움이됩니다.
또한 새 코드를 개발하는 동안 이전 코드를 유지해야하므로 코드 버전을 변경하기가 매우 번거롭고 불편하게 만들어 코드를 매우 깨지기 쉽고 실수하기가 쉽습니다. 이는 의도 된 재건 목적에 위배됩니다. 때때로 이러한 상황은 계속됩니다 - 새로운 이점과 오래된 코드를 번갈아 가면서 가장 좋은 혜택이 먼저 수행되거나 처음에 아이디어를 가져온 컨설턴트가 다른 일을했거나 예산이 줄어들었고, 그러한 지연 프로젝트를 유지하는 것을 싫어하기 때문입니다.
이들은 리팩토링입니다
그러한 강력한 프로젝트 개발에서 재건의 개념을 통합하는 것은 잘못입니다. 그들은 완전히 다른 개발 비용과 위험을 가진 또 다른 종류의 작업입니다. 그것은 재건이 무엇인지, 재건이 무엇을 할 수 있는지에 대한 사람들의 이해를 혼란스럽게합니다.
리팩토링은 테스트 및 코드 리뷰 작성과 마찬가지로 일일 개발/품질 관리의 필수 요소로 코드를 작성하거나 유지하는 프로세스에 통합해야합니다. 리팩토링은 조용하고 지속적으로 그리고 절제 적으로 완료해야합니다. 그것은 우리의 업무 에너지를 그것으로 나누어야하며, 건설 기간 평가 및 위험 평가에서 그 존재를 고려해야합니다. 올바르게 수행하면 작업 의이 부분을 외부인에게 설명하거나 확인할 필요가 없습니다.
리팩터에 몇 분 또는 1 시간을 소비하는 것은 개발 프로세스의 수정과 같으며 작업의 일부입니다. 며칠이 걸리면 리팩토링이 아닙니다. 재 작성 또는 재 설계입니다. 코드를 리팩토링하기 위해 시간의 일부 (또는 전체 스프린트 사이클)를 명시 적으로 따로 설정 해야하는 경우 코드를 정리하기 위해 승인을 신청하거나 코드를 개발 요구 사항으로 정리 해야하는 경우 리팩토링 기술과 도구를 사용하더라도 다른 종류의 작업을 수행하고 있습니다.
일부 프로그래머들은 코드를 근본적이고 중요한 수정을하는 것이 자신의 권리와 의무라고 생각하며, 리팩토링이라는 이름으로 재 설계하고 다시 작성하여 향후 기술을 실망시키지 않을 것입니다. 재 설계 및 재 작성은 때때로 옳은 일입니다. 그러나 솔직함과 명확성으로 인해 이러한 활동에 재건의 이름을주지 마십시오.