728x90
※출처 : TOPCIT 에센스
리팩토링 (Refactoring)
- 외부의 프로그램 동작은 변경하지 않고 프로그램 내부 구조를 개선하는 것을 의미한다.
- 외부적 기능은 수정하지 않고 내부적 구조 및 관계를 단순화하여 소프트웨어의 유지 보수성을 향상시켜 품질을 높이는 것
코드스멜 (Code Smell)
- 개발자가 이해하거나 유지보수하기 어려워 리팩토링의 대상이 되는 코드
코드스멜의 종류
종류 | 설명 |
중복된 코드 | 기능, 데이터 코드가 중복되어 작성 |
너무 긴 메서드 | 메서드가 너무 길다 |
방대한 클래스 | 힌 클래스가 너무 많은 속성과 메서드를 가짐 |
과다한 매개변수 | 메서드의 매개변수가 너무 많음 |
두 가지 이유로 수정되는 클래스 | 클래스는 한가지 종류의 책임만을 가져야 하기에 2가지 이상의 이유로 수정되면 안된다. |
여러 클래스를 동시에 수정 | 특정 클래스를 수정할 때마다 다른 클래스들에서 변경을 수행해야하는 경우 |
데이터 뭉치 | 합쳐서 다뤄야 할 데이터가 한 클래스에 있지 않다. |
기본 타입 집착 | 클래스를 만들지 않고 int와 같은 기본형 데이터 타입만 사용하는 경우 |
스위치 문 | switch문이나 if 문으로 동작을 나누는 경우 |
게으른 클래스 | 클래스가 하는 역할이 별로 없는 경우 |
의심스러운 일반화 | '언젠가 확장 하겠지 '하며 일반화한다. |
클래스 인터페이스 불일치 | 클래스 인터페이스가 적절하지 않다. |
불완전한 라이브러리 클래스 | 기존 라이브러리 클래스를 사용하기 어렵다. |
평행상속 | 하위 클래스를 만들면 클래스 계층의 다른 곳에도 하위 클래스를 만들어야 함 |
주석 | 코드의 모자란 부분을 설명하기 위한 자세한 주석이 붙어 있다. |
리팩토링 기법
기법 | 설명 | |
메서드 정리 | 메서드 추출 | 그룹으로 함께 묶을 수 있는 코드 조작이 있을 때, 코드의 목적이 잘 드러나도록 메서드 이름을 지어 별도의 메서드로 뽑아내는 작업 |
메서드 파라미터 교체 | 객체가 메서드를 호출한 다음, 결과를 다른 메서드에 매개변수로 넘기고 있으면 수신자가 그 메서드를 호출하도록 하는 작업 | |
객체 간 기능 이동 | 클래스 추출 | 두 개의 클래스가 해야할 일을 하나의 클래스가 하고 있는 경우 새로운 클래스를 만들어 관련있는 필드와 메서드를 예전 클래스에서 이전 |
서브클래스 추출 | 어떤 클래스가 일부 인스턴스에 의해서만 사용되는 기능을 가지고 있다면 인스턴스만 사용하는 기능을 담당하는 서브클래스를 만드는 작업 | |
인터페이스 추출 | 여러 클라이언트가 한 클래스의 인터페이스의 동일한 부분집합을 사용하고 있다면 부분집합을 인터페이스로 뽑아내는 작업 | |
이름 | 메서드 이름 수정 | 타입이 내장되어 있는 이름은 타입에 연관되지 않으면서 잘 전달할 수 있는 이름으로 변경 |
추측성 일반화 | 인라인 메서드 | 메서드의 본문이 메서드 이름만큼 명확하다면 해당 본문을 메서드를 호출하는 호출자 안으로 옮기고 메서드를 삭제 |
계층 붕괴 | 슈퍼 클래스와 서브 클래스가 별로 다르지 않다면 하나로 통합 |
728x90
'Computer Science > 소프트웨어 공학' 카테고리의 다른 글
[소프트웨어공학] 역공학 (Reverse Engineering) (0) | 2020.11.04 |
---|
댓글