리팩토링(Refactoring)이란?

HK_An·2022년 5월 29일
1

알아보자

목록 보기
3/4
post-thumbnail

개요

리팩토링은 흔히 코드 리팩토링을 나타내며 결과의 변경 없이 코드의 구조를 재조정하는 것을 의미합니다. 우리는 리팩토링을 통하여 코드의 가독성, 유지보수성, 확장성, 성능을 증가시키고 복잡성, 위험도, 코드냄새 등을 감소시키는 것을 기대할 수 있습니다.

리팩토링의 목적

public void printScore() { // 간단한 예제지만 한 메소드가 맡은 역할이 너무 많아 보기 힘듦
	String name = "John Doe";
    int math = MathScore.getPointsCount() * 5;
    int eng = EnglishScore.getPointsCount() * 5;
    int history = HistoryScore.getPointsCount() * 5;
    double avg = (math + eng + history) / 3;
    
    if( avg > 95 ) System.out.println(name + "의 학점은 A+");
    else if( avg <= 95 && avg > 90 ) System.out.println(name + "의 학점은 A");
    else if( avg <= 90 &&  avg > 85 ) System.out.println(name + "의 학점은 B+");
    ...
    
}

1. 유지보수성 증대

컴퓨터가 스스로 요구사항을 이해하고, 코드를 스스로 작성하는 그날까지는 개발자가 직접 소스코드를 작성하거나, 최소한 검수를 해야합니다. 아무리 성능이 좋은 코드라고 해도, 의도를 이해하기 어렵거나 스파게티 코드가 되어있는 경우에는 유지보수하기 전에 해당 소스를 이해하는 데에 많은 시간이 드는 경우도 있습니다. (이럴바엔 내가 새로 짜는게 빠르겠다.) 이러한 점에 있어서 본인이 아닌 다른 개발자가 읽기 쉽고 작성자의 의도를 파악하기 쉬운 코드는 중요합니다.

2. 확장성 증대

디자인 패턴을 흔히 사용되는 패턴으로 변경하고, 응집도는 높이고, 결합도를 낮춤으로써 결론적으로 확장성을 증대시킬 수 있습니다. 이를 통하여 새로운 기능을 추가할때 비교적 더 안정적인 동작을 기대할 수 있습니다.

리팩토링이 필요할 때

1. 비슷한 내용이 3번 이상 반복될 때 (The Rule of Three)

같은 내용의 소스 코드가 3번 이상 반복될 시에는 상황에 따라 리팩토링을 고려해야합니다.

2. 새로운 기능을 추가할 때

지금 작성되어있는 코드에서 새로운 내용을 추가하기 어려워 보일때는 리팩토링을 고려해야합니다.

3. 버그를 수정할 때

버그수정시에 버그발견->원인파악->로직수정의 흐름으로 버그를 수정하게 되는데, 원인을 파악하고 해당 버그가 발생하지 않게끔 수정하는 것 뿐 아니라, 가능한 경우에 구조적으로 버그가 일어나지 않게끔 변경한다면 조금 더 유지보수성이 좋은 코드를 작성할 수 있습니다.

4. 코드 리뷰를 할 때

코드 리뷰시 아무래도 본인이 작성시에 놓쳤던 부분이나 생각하지 못한 부분에 있어 코멘트를 받게 됩니다. 이럴 때에 요청받은 방향으로 리팩토링을 하게 되면 디자인 패턴이나 스타일 등이 통일성을 갖게 되어 차후 유지보수에 있어서 유리함을 갖게 됩니다.

참고

https://ko.wikipedia.org/wiki/%EB%A6%AC%ED%8C%A9%ED%84%B0%EB%A7%81
https://en.wikipedia.org/wiki/Code_refactoring
https://en.wikipedia.org/wiki/Code_smell
https://ikkison.tistory.com/82

0개의 댓글