[Refactoring] 메소드 구성
📌 메소드 구성 (Composing Methods)
메소드를 간소화하고 코드 중복을 제거하며 향후 개선을 위한 기반을 마련
✏️ 메소드 추출 (Extract Method)
그룹으로 묶을 수 있는 코드가 있다면 적절한 메소드를 만들어서 해당 코드를 메소드 안으로 이동
✔️ 장점
- 더 읽기 쉬운 코드
- 재사용이 가능해서 코드 중복 감소
- 코드의 독립적인 부분을 분리하여 오류 가능성 감소
✏️ 메소드 인라인 (Inline Method)
메소드 호출 부분이 메소드 자체보다 더 자세할 때 메소드 호출을 메소드 내용으로 바꾸고 메소드 삭제
✔️ 장점
- 불필요한 메소드의 수를 최소화하여 코드를 더 간단하게 만듬
✏️ 변수 추출 (Extract Variable)
식의 결과나 부분을 자체 설명이 가능한 별도의 변수 작성
<변경 전>
void renderBanner() {
if ((platform.toUpperCase().indexOf("MAC") > -1) &&
(browser.toUpperCase().indexOf("IE") > -1) &&
wasInitialized() && resize > 0 )
{
// do something
}
}
<변경 후>
void renderBanner() {
final boolean isMacOs = platform.toUpperCase().indexOf("MAC") > -1;
final boolean isIE = browser.toUpperCase().indexOf("IE") > -1;
final boolean wasResized = resize > 0;
if (isMacOs && isIE && wasInitialized() && wasResized) {
// do something
}
}
✔️ 장점
- 코드의 가독성이 좋아지고 주석이 줄어들어 더 읽기 쉬워짐
❌ 단점
- 불필요한 연산이 실행되어 프로그램 성능이 저하될 수 있음
ex) if(a() || b())라는 조건문이 있을 때 a()가 true라면 b()는 연산하지 않아도 true이므로 실행이 됨.
하지만 변수로 이미 선언한 경우 a()와 b()의 연산이 항상 호출되므로 불필요한 연산이 발생함.
✏️ 임시 변수 인라인 (Inline Temp)
변수에 대한 참조를 표현식 자체로 변경
✔️ 장점
- 불필요한 변수를 제거하여 가독성 약간 향상시킴
❌ 단점
- 임시 값이 여러번 재사용된다면 캐시를 많이 사용함
→ 단순성으로 인해 성능이 저하되는지 확인 필요
✏️ 임시 변수를 쿼리로 변경 (Replace Temp with Query)
임시 변수에 표현식의 결과를 저장하고 있다면 새로운 메소드에 표현식을 넣고 임시 변수대신 메소드 호출
✔️ 장점
- 메소드의 목적을 이해하기 쉽기 때문에 코드 가독성이 좋아짐
- 메소드 재사용이 되므로 중복 코드를 제거할 수 있음
✏️ 분할 임시 변수 (Split Temporary Variable)
임시 변수에 표현식의 결과를 저장하고 있다면 새로운 메소드에 표현식을 넣고 임시 변수대신 메소드 호출
✔️ 장점
- 쉽게 교체 가능하므로 유지 관리가 편해짐
- 변수명으로 쉽게 의도를 파악하므로 코드가 읽기 쉬워짐
✏️ 매개변수에 대한 할당 제거 (Remove Assignments to Parameters)
매개변수 대신 지역 변수 사용
✔️ 장점
- 쉽게 교체 가능하므로 유지 관리가 편해짐
- 메소드 추출 방법을 사용할 때 도움이 됨
✏️ 매소드를 매소드 객체로 변경 (Replace Method with Method Object)
지역 변수가 얽혀 있어서 메소드 추출을 못한다면 메소드를 별도의 클래스로 변환
✔️ 장점
- 메소드의 크기가 커지는 것을 막을 수 있음
- 원래의 클래스를 오염시키지 않고 클래스 내의 하위 메소드로 분활 가능
❌ 단점
- 클래스가 추가되어서 프로그램의 전체 복잡성 증가
✏️ 알고리즘 교체 (Substitute Algorithm)
알고리즘을 구현하는 메서드의 본문을 새로운 알고리즘으로 변경
📑 참고 자료
Author And Source
이 문제에 관하여([Refactoring] 메소드 구성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hi_potato/Refactoring-composing-methods저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)