Martin Fowler의 저서 "리팩토링 : 기존 코드의 디자인 개선"이 나오기 전에 우리는 코드 "아키텍처"와 사소한 변경 "정리"에 대한 주요 변경 사항을 호출했습니다. 리팩토링 기술인 IMO는 우리가 영원히 해왔 던 상식적인 일입니다.
리팩토링이 새로운 것이라 생각하십니까? 아마도 코드 정리 시간을 할당하도록 관리를 속일 수있는 방법일까요?
Martin Fowler의 저서 "리팩토링 : 기존 코드의 디자인 개선"이 나오기 전에 우리는 코드 "아키텍처"와 사소한 변경 "정리"에 대한 주요 변경 사항을 호출했습니다. 리팩토링 기술인 IMO는 우리가 영원히 해왔 던 상식적인 일입니다.
리팩토링이 새로운 것이라 생각하십니까? 아마도 코드 정리 시간을 할당하도록 관리를 속일 수있는 방법일까요?
답변:
리팩토링은 언덕보다 나이가 많기 때문에 새로운 것은 아닙니다.
리팩토링은 정리되지 않습니다. 글쎄, 가능하지만 청소에만 국한되지는 않습니다.
동작을 유지하면서 응용 프로그램의 아키텍처 (대규모 또는 소규모)를 조정합니다.
즉, 애플리케이션의 일부가 어제 완벽하게 깨끗하고 훌륭했지만 오늘날의 새로운 기능은 새로운 기능에 맞게 해당 부분을 조정해야합니다.
기존 기능을 중단하고 싶지 않으므로 리팩토링 인 동작을 유지하면서 애플리케이션 구조를 조정합니다.
이것은 코드에 어떤 변화가 있더라도 항상 테스트를 실행해야한다는 것입니다.
코드를 정리하는 중입니다. 본질적으로 프로그래머 (특히 Martin Fowler)는 코드를 정리할 때마다 동일한 작업을 수행하는 경향이 있음을 알았습니다. 그들은 깔끔한 방법과 관련된 코드 문제와 프레스토를 정의하고 표시했습니다! 리팩토링이 탄생했습니다.
디자인 패턴과 동일합니다. 사람들은 특정 문제에 대해 동일한 접근 방식을 반복해서 사용하는 경향이 있음을 알게되었습니다. 그들은 접근 방식에 레이블을 지정하고 정의했으며 이제는 코드에서 수십 가지 패턴을 사용하지 않는 한 실제 프로그래머가 아닌 것 같습니다.
리팩토링에는 마술이 없습니다. 그것은 오래된 관행을 설명하는 새로운 전문 용어입니다.
우리는 회사에서 세 가지 별도의 작업을 수행하고 세 가지에 시간을 할당합니다.
예 : 네 가지 작업을 수행하는 추악하고 읽을 수없는 100 줄 방법을 각각 25 줄씩 4 개의 재사용 가능한 방법으로 나누기
예 :이 코드가 더 이상 필요하지 않은지 확인한 후 주석이 달린 코드를 제거하십시오.
예 : 추가 Culture.Invariant
의 string.Format
(또는 더 적합한 다른 배양).
따라서 필자의 경우 리팩토링은 정리와 매우 다릅니다 . 정리 작업을 수행 할 때, 난 다시는 단위 테스트를 실행할 필요가 없습니다 : 코드 이전 일 경우, 그것은 것입니다 정리 한 후 작동합니다. 즉, 빈 줄을 제거하거나 코드 작동을 멈출 것이라는 주석을 추가했기 때문이 아닙니다. 반면에, 오래된 코드의 복잡한 부분을 리팩터링하면 실수를 할 수 있으므로 리팩토링 후에 단위 테스트를 실행해야합니다.
나는 "리팩토링은 코드를 정리하기위한 멋진 단어"에 동의하지만 "그냥"이 아니라 사람들은 이유를 위해 멋진 단어를 사용합니다. 때로는 영리 해 보이고 싶거나 때로는 더 크고 정확한 의미를 전달하기 때문에 IMHO 리팩토링 (때때로 잘못 사용하더라도)이 후자를 의미합니다.
"정리"는 "비트 재 포맷"에서 "큰 청크 재 작성"에 이르기까지 모든 것을 의미 할 수 있습니다.
"리팩토링"은 구체적으로 "코드를 조금씩 변경하고 동일한 기능을 유지하면서 더 나은 디자인으로 변환하도록 설계된 것"과 같은 것을 의미합니다. 그리고 당신이하는 일에 대한 모범 사례가 있습니다. 일부는 임시적이지만 단위 테스트 사용, 새로운 기능이나 클래스로 함수의 일부 추출 등 사람들이 배울 수 있고 배우는 일반적인 원칙이 있습니다. .
"코드 정리를위한 시간 할당으로 관리를 속이십시오"라고 말합니다. 그러나 "리팩토링"이라고 말하면 명확성에 대한 꾸준한 투자가 이제 미래의 효율성 배당금을 지불 할 것이라는 개념을 올바르게 전달한다면 이는 "속임수"가 아니라 명확하고 효과적인 의사 소통입니다.
리팩토링은 정규화가 관계형 데이터에 대한 것이므로 코딩하는 것입니다. 응용 프로그램에서 개념을보다 명확하고 명확하며 효율적으로 표현하는 과정입니다.
용어 리팩토링을 이해하는 방법에 따라 다릅니다. 대부분의 사람들에게 이것은 행동을 바꾸지 않고 구조를 개선하는 과정입니다. 동의한다면,이 책이 나오기 오래 전에 이루어졌습니다. 나는 (다른 많은 것들 중에서도) 책을 쓰기 전에 수업의 이름을 바꾸고 수업을 추출하고 분석법을 추출했기 때문에 알고 있습니다. 리팩토링이라고 부르지는 않았지만 본질적으로 정확히 똑같은 일을하고있었습니다.
개인적으로 리팩토링은 사람들이 현재 "자동화 된 코드 리팩토링"이라고 부르는 것입니다. 즉, IDE 내에서 다양한 리팩토링 기술을 지원합니다. 이것은 내가 전에하고 있었던 것에 대한 진정한 개선입니다 (실제로 매우 고통 스럽습니다). 한 클래스에서 변경을 수행 할 수 있으며 이것이 나머지 소프트웨어에 어떤 영향을 미칠지 걱정하지 않아도됩니다. Martin은 리팩토링 기술을 알고리즘으로 표현하여 다양한 IDE에서 구현할 수있는 시점까지 공식화했다고 생각합니다.
따라서 리팩토링을 프로세스로 이해하면 새로운 것이 아닙니다. 자동화라고 생각하면 크게 개선됩니다. 합리적으로 큰 프로젝트에서 몇 가지 핵심 클래스의 이름을 바꾸어 (문자 그대로, IDE의 리팩토링 옵션을 사용하지 않음) 이유를 확인하십시오.)
다른 사람이 집을 청소할 때 목표는 물건을 깨끗하게 정리하는 것이므로 아무것도 찾을 수 없습니다. 리팩토링은 방, 옷장, 캐비닛, 선반, 쓰레기통 등을 짓고 라벨을 붙일 것입니다. 여전히 같은 물건을 대부분 보유하고 있습니다 (부엌에서 구운 치즈 샌드위치를 만들고 거실에서 먹을 수는 있습니다). 쉽게 찾을 수 있고 새로운 물건을 넣을 수있는 효율적인 장소가 있습니다.
리팩토링은 동작을 변경하지 않고 구조를 개선하고 있습니다. 엄격한 의미에서 리팩토링은 우수한 테스트 규칙을 수반합니다. "정리"할 때 반드시 필요한 것은 아닙니다.