본문 바로가기
IT/트렌드&개념공부&TIP

리팩토링이란?

by Andante con moto 2021. 1. 24.
728x90
반응형

요약 : 외부 기능은 그대로 둔채, 알아보기 쉽고, 수정 하기 쉬운 코드를 만드는 것

1) 버그 찾기가 수월해집니다. 
2) 새로운 기능의 추가가 쉬워집니다. 
3) 코드 리뷰가 쉬워집니다.


1. 리팩토링의 정의
-SW를 보다 쉽게 이해할 수 있고 적은 비용으로 수정할 수 있도록 겉으로 보이는 동작의 변화 없이 내부구조를 변경하는 것 → 프로그램의 가치 상승
-Code smell을 고치고 다듬는 과정

2. 리팩토링의 목적
- SW의 디자인을 개선시킴
- SW를 이해하기 쉽게 만듦
- 버그를 찾는 데 도움을 줌
- 프로그램을 빨리 작성할 수 있게 도와 줌

※ 참고) 프로그래밍의 가치
- 당장 수행되어 작업에 도움이 되는 가치
- 향후 변경이나 필요에 대비한 가치

3. 리팩토링 시기
- 기능을 추가할 때
- 버그를 수정할 때
- 코드를 검토할 때

4. 코드스멜과 리팩토링 대상
1) 코드스멜
- 읽기 어려운 프로그램
- 중복된 로직을 가진 프로그램
- 실행 중인 코드를 변경해야 하는 특별 동작을 요구하는 프로그램
- 복잡한 조건이 포함된 프로그램

2) 리팩토링 대상
- 중복코드
- 긴 메쏘드명
- 큰 클래스
- 긴 파라미터 리스트
- Switch Parameter
- 병렬 상속 구조
- Lazy Class
- Temporary Field
- Data Class
- 불충분한 Library Class
- Comment 등

5. 리팩토링 프로세스
- 소규모의 변경: 단일 리팩토링.
- 코드가 전부 잘 작동되는지 테스트
- 전체가 잘 작동하면 다음 리팩토링 단계로 전진
- 작동하지 않으면 문제를 해결하고 리팩토링한 것을 Undo하여 시스템이 작동되도록 유지

6. 리팩토링 기법
- Extract Method : 그룹으로 함께 묶을 수 있는 코드 조각이 있으면, 코드의 목적이 잘 드러나도록 메소드의 이름을 지어 별도의 메소드로 뽑아낸다.
- Replace Temp with Query : 어떤 수식의 결과값을 저장하기 위해서 임시변수를 사용하고 있다면, 수식을 뽑아내서 메소드로 만들고, 임시변수를 참조하는 곳을 찾아 모두 메소드 호출로 바꾼다.
- Move Method : 메소드가 자신이 정의된 클래스보다 다른 클래스의 기능을 더 많이 사용하고 있다면, 이 메소드를 가장 많이 사용하고 있는 클래스에 비슷한 몸체를 가진 새로운 메소드를 만든다.
- Move Field : 필드가 자신이 정의된 클래스보다 다른 클래스에 의해서 더 많이 사용되고 있다면 Target Class에 새로운 필드를 만들고 기존 필드를 사용하고 있는 모든 부분을 변경
- Extract Class : 두개의 클래스가 해야할 일을 하나의 클래스가 하고 있는 경우 새로운 클래스를 만들어서 관련 있는 필드와 메소드를 예전 클래스에서 새로운 클래스로 옮긴다.
- Inline Class : 클래스가 하는 일이 많지 않은 경우에는 그 클래스에 있는 모든 변수와 메소드를 다른 클래스로 옮기고 그 클래스를 제거한다.
- Rename Method : 메소드의 이름이 그 목적을 드러내지 못하고 있다면 메소드의 이름을 바꾼다.
- Full Up Field : 두 서브클래스가 동일한 필드를 가지고 있다면, 그 필드를 수퍼클래스로 옮겨라.
- Full Up Method : 동일한 일을 하는 메소드를 여러 서브 클래스에서 가지고 있다면, 이 메소드를 수퍼클래스로 옮겨라.
- Encapsulation Field : Public필드가 있는 경우, 그 필드를 Private로 만들고 접근자를 제공하라.
- Replace Magic Number with symbolic Constant : 특별한 의미를 가지는 숫자 리터럴이 있으면, 상수를 만들고, 의미를 잘 나타내도록 이름을 지은다음, 숫자를 상수로 바꾸어라. 






728x90
반응형

댓글