일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- leetcode
- #심플즈 크랙미
- Spring
- #크랙미
- java
- #파밍
- #보안뉴스
- #abex
- GraphQL
- #보안이슈
- #크랙미 9번
- 리버싱
- #abex크랙미4번
- #abex크랙미
- #크랙미4번
- springframework
- #크랙미 10번
- #고클린
- Easy
- #심플즈
- #크랙미3번
- #크랙미 5번
- #리버싱
- java8
- #크랙미2번
- Today
- Total
Halo World
리팩토링 수행 절차 본문
| 1. 리팩토링할 대상을 선정한다.
처음부터 모든 프로그램을 리팩토링 할 수는 없다. 가장 중요한, 자주 추가 및 변경되는 프로그램을 선정한다.
> 반복되는 코드
> 긴 메소드
> 큰 클래스
> 긴 매개변수 목록
> 확산을 위한 변경
: 한 클래스의 목적이 여러 부분에서 사용되고, 각각의 목적에 따라서 수정이 이루어져야 하는 경우 분리하는 것이 좋음
> 샷건(산탄총) 수술
: 확산을 위한 변경과 같아보이지만, 하나의 수정을 위해서 여러 클래스를 건드려야 할 경우가 발생된다면 차후 하나의 클래스만 수정하는 것이 가능하도록 만듬
> 기능에 대한 욕심
: 어떤 메소드가 같은 클래스의 메소드보다, 다른 클래스의 메소드를 더 많이 사용한다면 그 메소드는 많이 사용하는 클래스로 옮기는 것이 차라리 낫다.
> 큰 데이터 덩어리
: 하나의 TO(Transfer Object or Value Object)를 여러 곳에서 사용하려고 덕지덕지 변수들을 추가해서 사용하는 경우가 상당히 많다. TO가 아니라 다른 클래스에서도 마찬가지이다. 필요없는 객체가 생성되지 않도록 꼭 필요한 것만 묶어서 재구성해야한다
> 기본 자료형에 대한 집착
: 너무 기본 자료형만 밝히지 말고 필요한 TO를 만들어서 사용하는 것이 좋다.
> Switch 문장
: Switch 문장을 다형성에 맞추어 중복이 최대한 발생하지 않도록 해야 한다.
> 게으른 클래스
: 별로 사용되지 않는 클래스 삭제
> 추측한 것들 제거
: 필요하 것이라고 생각해서 만든 것들 중 사용되지 않는 것 삭제
> 임시 필드 제거
> 메시지 연결
: 메시지를 의미 없이 연속적으로 호출하고, 호출하고 또 호출하게 되는 것
> 중간자적 입장
: 클래스에 있는 메소드가 주로 다른 클래스를 참조한다면, 지나친 캡슐화가 된 것이므로 수정
> 높은 연관성 제거
: 두 클래스의 연관성이 너무 높으면 유지 보수할 때 위험하다
> 하는 일은 같은데 무엇을 사용해야하는지 혼동되는 클래스
> 약간 부족한 라이브러리
: 제공받은 라이브러리가 부족한 부분이 있다면, 기능을 보완하는 클래스를 추가하는 것이 좋음
> 잘못된 상속
: 상속받은 클래스가 너무 많은 일을 하거나 복잡할 경우, 부모 클래스에게 동생을 하나 만들어 달라고 하는 것이 나음
> 불필요한 주석 제거
| 2. 선정된 대상의 테스트 코드를 작성한다.
리팩토링을 하기 전부터 프로그램에 오류가 있을 수도 있고, 리팩토링을 한 이후에 프로그램이 제대로 수행되는지를 점검하려면 테스트 코드를 작성하는 것은 필수이다. 리팩토링 후에 수행결과가 다르게 나온다면, 문제가 되 는 부분을 찾는데 엄청난 시간이 소요된다.
| 3. 코드를 분해한 후 재조립한다.
나쁜 느낌이 드는 코드는 꼭 살펴보아야 한다. 누가 보더라도 직관적으로 이해가 되지 않는 코드는 문제가 있는 것이다.
여러가지 방법을 사용해서 코드를 수정하는 작업을 수행한다
> 메소드 정리
> 객체나 클래스 사이의 이 동
> 데이터의 재구성
> 조건문을 이해하기 쉽게 단순화
> 메소드 호출 단순화
> 상속관계 재구성
| 4. 재조립한 코드를 테스트한다.
프로그램을 재조립하고, 테스트해보지 않으면 어떻게 될지 아무도 모른다. 반드시 테스트를 수행해야 한다.
| 5. 3번 작업과 4번 작업을 반복한다.
3번 작업과 4번 작업을 만족할 때까지 반복한다.
[출처]
'개발 지식 > SW ENGINEERING' 카테고리의 다른 글
Refactoring(리팩토링) (0) | 2017.06.02 |
---|