Pure Software Engineer :)
[Refactoring] What is refactoring? 본문
Refactoring - written by by Martin Fowler
프로그래머라면 반드시 읽어봐야 할 책중에 하나인 리팩토링에 관한 책.
리팩토링에 대한 개념부터 시작해서 코드예제까지
조금씩 읽으면서 정리를 해보자.
오늘은 그 시작!!
리팩토링이란?
- 외부 동작을 바꾸지 않으면서 내부 구조를 개선하는 방법
- 소프트웨어 시스템을 변경하는 프로세스
- 버그가 끼어 들 가능성을 최소화
- 코드를 정리하는 정형화된 방법
그렇다면 리팩토링은 반대는?
퍼포먼스 최적화!
퍼포먼스 최적화란?
- 리팩토링과 마찬가지로 소프트웨어의 동작을 바꾸지는 않음
- 하지만, 리팩토링과 달리 종종 코드를 이해하기 더 어렵게 만듦
- 이것은 필요한 퍼포먼스를 얻기 위해서는 감수해내야 하는 것
리팩토링을 할때 두 가지 구별된 작업을 위해 시간을 나누어야 한다.
1. 기능을 추가할때
- 기존 코드를 건드려서는 안 되고 단지 새로운 기능만을 추가해야 함
2. 리팩토링 할때
- 기능을 추가해서는 안 되고 단지 코드의 구조에만 신경 써야 함
- 어떤 테스트도 추가하지 않음 (리팩토링을 위한 인터페이스 변경은 제외)
이렇게 리팩토링을 할때 두 가지 작업을 반복하게 될 수 있는데,
이때 프로그래머는 자신이 현재 무엇을 하고 있는지 반드시 인지하고 있어야 한다는 의미에서
'두개의 모자' 라는 용어를 사용
책을 읽다가 와닿는 부분이 있었다.
저자는 익숙하지 않은 코드를 이해하는 데 도움을 받고자 리팩토링을 사용한다고 한다.
최근 회사에서 다른사람이 오래전 작성해둔 코드를 인수인계 받으면서 이해할 필요가 있었는데,
보통 문서화가 잘 되어 있지 않은경우 코드를 보면서 이해할 수 밖에 없다.
또한, 나는 코드가 최고의 문서라고 생각한다.
리팩토링을 하기위해서는 코드를 이해하지 않으면 불가능하기에,
코드도 이해하면서 구조도 개선하는 일석이조의 효과를 볼 수 있다.
'Software Engineering > Programming' 카테고리의 다른 글
[C++] 더블 디스패치 (double dispatch) (0) | 2014.10.25 |
---|---|
[C++] bool vs. enum (0) | 2014.08.11 |
[C] namespace (0) | 2014.01.29 |
[항목5] C++가 은근슬쩍 만들어 호출해 버리는 함수들에 촉각을 세우자 (0) | 2014.01.07 |
[C, C++] Compile time assertion (0) | 2013.12.12 |