개발자로서 새로운 프로젝트 작업을 어떻게 시작하나요…?
빠른 정렬
먼저 몇 가지 기본 요구 사항을 수집한 다음 요구 사항에 따라 기능을 하나씩 구현하기 시작합니다. 프로젝트를 진행하고 이에 대해 자세히 알아가면서 코드베이스에 코드를 계속 추가하고 변경하게 됩니다. 나중에 버그와 극단적인 경우를 수정하기 위해 코드도 변경합니다.

하지만 며칠, 혹은 몇 달이 지나면 어떻게 될까요...? 코드는 어떻게 생겼나요...?? 복잡합니까? 이해하기 어렵나요? 그렇다면 코드를 개선하거나 코드를 재구성하는 데 주의를 기울이지 않은 것입니다. 기존 코드를 보지 않고 중복된 코드를 작성했을 수도 있고, 더 긴 메소드/함수, 큰 클래스, 너무 많은 매개변수, 직관적이지 않은 변수 이름, 코드 배치 등을 작성했을 수도 있습니다.
소프트웨어의 기능이나 애플리케이션의 외부 동작을 변경하지 않고 코드를 개선하거나 업데이트하는 것을 코드 리팩토링이라고 합니다. 이는 기술 비용을 절감하고 코드를 보다 효율적이고 유지 관리하기 쉽게 만듭니다. 코드 리팩토링 과정을 일찍 주의하지 않으면 나중에 코드 오류에 대한 대가를 치르게 됩니다. 따라서 코드 정리를 무시하지 마십시오.
소프트웨어 개발 프로세스에서 개발자마다 코드 작성 스타일이 다릅니다. 그들은 변경하고, 코드를 유지하고, 코드를 확장하며, 대부분의 경우 지속적인 리팩토링 없이 코드를 떠납니다. 리팩터링되지 않은 코드는 다음과 같은 경향이 있습니다. 코드 부패: 많이 중복 코드, 클래스나 패키지 간의 비정상적 종속성, 잘못된 클래스 책임 할당, 메서드나 클래스당 너무 많은 책임 등과 같은 코드의 혼란과 혼란. 이러한 모든 문제를 피하려면 지속적인 리팩토링이 중요합니다.
이제 질문은… 코드를 리팩터링하는 기술은 무엇입니까?
코드를 리팩토링하는 몇 가지 널리 사용되는 일반적인 기술에 대해 논의할 예정이지만 그 전에 몇 가지 빠른 팁에 대해 논의해 보겠습니다.
팁:
- 코드 리팩토링을 작은 단계로 수행해야 합니다. 프로그램을 조금만 변경하면 각각의 작은 변경으로 인해 코드가 약간 더 좋아지고 애플리케이션이 작동 상태로 유지됩니다.
- 리팩토링 프로세스를 약간 변경한 후 TDD 및 CI 테스트를 실행합니다. 이러한 테스트를 실행하지 않으면 버그가 발생할 위험이 있습니다.
- 리팩토링 프로세스 중에는 새로운 특징이나 기능을 만들지 마십시오. 기존 코드에 업데이트나 새 기능을 추가하기 전에 코드를 리팩터링해야 합니다.
- 리팩토링 프로세스는 테스트 결과에 영향을 미칠 수 있으므로 QA 및 테스트 팀을 리팩토링 프로세스에 참여시키는 것이 좋습니다.
- 당신은 당신의 코드가 완전히 만족스럽지 않을 것이라는 점을 받아들여야 합니다. 리팩터링된 코드는 가까운 시일 내에 구식이 될 것이므로 다시 리팩터링해야 합니다.
가장 일반적인 코드 리팩토링 기술
코드를 리팩터링하는 데는 다양한 접근 방식과 기술이 있습니다. 인기 있는 몇 가지에 대해 논의해 보겠습니다.
1. 적록 리팩토링
Red-Green은 Agile 소프트웨어 개발 프로세스에서 가장 널리 사용되고 널리 사용되는 코드 리팩토링 기술입니다. 이 기술은 설계 및 구현에 대한 테스트 우선 접근 방식을 따르며, 이는 모든 형태의 리팩토링을 위한 기반을 마련합니다. 개발자는 테스트 중심 개발 주기로의 리팩토링을 주도적으로 수행하며 이는 3개 구역 단계로 수행됩니다.

- 빨간색: 첫 번째 단계는 실패한 빨간색 테스트를 작성하는 것부터 시작됩니다. 멈춰서 개발해야 할 것이 무엇인지 확인합니다.
- 녹색: 두 번째 단계에서는 가장 간단한 코드를 작성하고 개발 통과 녹색 테스트를 받습니다.
- 리팩터링: 마지막 및 세 번째 단계에서는 테스트를 친환경적으로 유지하면서 코드를 개선하고 강화하는 데 중점을 둡니다.
따라서 기본적으로 이 기술은 두 가지 별개의 부분으로 구성됩니다. 첫 번째 부분은 시스템에 새 기능을 추가하는 코드 작성과 관련된 것이고 두 번째 부분은 이 기능을 수행하는 코드를 리팩터링하는 것입니다. 작업 흐름 중에 두 가지 작업을 동시에 수행하면 안 된다는 점을 명심하세요.
2. 추상화를 통한 리팩토링
이 기술은 개발자가 대량의 리팩토링을 수행해야 할 때 주로 사용됩니다. 주로 우리는 코드의 중복(중복)을 줄이기 위해 이 기술을 사용합니다. 여기에는 클래스 상속, 계층 구조, 새 클래스 및 인터페이스 생성, 추출, 상속을 위임으로 대체, 그 반대 등이 포함됩니다.

문자열 메소드 자바로
풀업/푸시다운 방법이 이 접근 방식의 가장 좋은 예입니다.
- 풀업 방법: 코드 부분을 슈퍼클래스로 끌어오고 코드 중복을 제거하는 데 도움이 됩니다.
- 푸시다운 방법: 슈퍼클래스에서 코드 부분을 가져와서 이동합니다. 하위 클래스로 내려갑니다.
생성자 본문 가져오기, 하위 클래스 추출, 슈퍼클래스 추출, 계층 구조 축소, 양식 템플릿 메서드, 인터페이스 추출, 상속을 위임으로 대체, 위임을 상속으로 대체, 필드 아래로 푸시 등이 모두 다른 예입니다.
기본적으로 이 기술에서는 리팩터링이 필요한 시스템 부분과 결국 이를 교체할 대응 부분에 대한 추상화 계층을 구축합니다. 두 가지 일반적인 예가 아래에 나와 있습니다.
- 캡슐화됨 필드: 코드가 getter 및 setter 메소드를 사용하여 필드에 액세스하도록 강제합니다.
- 일반화 유형: 우리는 코드 공유를 허용하고, 유형 검사 코드를 상태로 대체하고, 조건부를 다형성으로 대체하는 등 보다 일반적인 유형을 만듭니다.
3. 구성방법
애플리케이션 개발 단계에서 우리는 프로그램에 긴 메소드를 작성하는 경우가 많습니다. 이러한 긴 메서드는 코드를 이해하기 어렵고 변경하기 어렵게 만듭니다. 이런 경우에는 주로 작성방법을 사용합니다.
이 접근 방식에서는 효율적인 방법을 사용하여 코드의 중복을 줄입니다. 몇 가지 예로는 메소드 추출, 변수 추출, Temp 인라인, Temp를 쿼리로 대체, 인라인 메소드, 임시 변수 분할, 매개변수에 대한 할당 제거 등이 있습니다.
추출: 우리는 조각화를 찾아 추출하기 위해 코드를 더 작은 덩어리로 나눕니다. 그런 다음 이러한 청크에 대해 별도의 메서드를 만든 다음 이 새 메서드에 대한 호출로 대체합니다. 추출에는 클래스, 인터페이스 및 지역 변수가 포함됩니다.
인라인: 이 접근법 우리 프로그램에서 불필요한 메소드 수를 제거합니다. 메소드에 대한 모든 호출을 찾은 다음 모든 호출을 메소드의 내용으로 바꿉니다. 그런 다음 프로그램에서 메서드를 삭제합니다.
4. 단순화 방법
이 접근 방식에는 두 가지 기술이 관련되어 있습니다. 두 가지 기술을 모두 논의해 보겠습니다.
- 조건식 단순화 리팩토링: 프로그래밍의 조건문 시간이 지나면서 더욱 논리적이고 복잡해집니다. 전체 프로그램을 이해하려면 코드의 논리를 단순화해야 합니다.
코드를 리팩터링하고 논리를 단순화하는 방법은 매우 많습니다. 그 중 일부는 조건식 통합 및 조건부 조각 복제, 조건부 분해, 조건부를 다형성으로 대체, 제어 플래그 제거, 중첩된 조건부를 보호 절로 대체 등입니다. - 메소드 호출 단순화 리팩토링: 이 접근 방식에서는 메서드 호출을 더 간단하고 이해하기 쉽게 만듭니다. 우리는 클래스 간의 상호 작용에 대해 연구하고 클래스에 대한 인터페이스를 단순화합니다.
예를 들면 새 매개변수 추가, 제거 및 도입, 매개변수를 명시적 메소드 및 메소드 호출로 대체, 메소드 매개변수화, 수정자와 별도의 쿼리 작성, 전체 객체 보존, 설정 메소드 제거 등이 있습니다.
5. 개체 간 기능 이동
이 기술에서는 새 클래스를 생성하고 이전 클래스와 새 클래스 간에 기능을 안전하게 이동합니다. 우리는 공개 접근으로부터 구현 세부 사항을 숨깁니다.
이제 문제는... 언제 클래스 간에 기능을 이동할지, 아니면 클래스 간에 기능을 이동할 때가 되었는지 어떻게 식별할 것인가입니다.
클래스에 책임이 너무 많고 일이 너무 많이 발생하는 경우 또는 클래스가 불필요하고 애플리케이션에서 아무 작업도 수행하지 않는 경우 이 클래스의 코드를 다른 클래스로 이동하고 완전히 삭제할 수 있습니다.
예: 필드 이동, 클래스 추출, 메서드 이동, 인라인 클래스, 대리자 숨기기, 외부 메서드 도입, 중간 사람 제거, 로컬 확장 도입 등
6. 준비 리팩토링
이 접근 방식은 애플리케이션에 몇 가지 새로운 기능을 추가하는 동안 리팩토링이 필요하다는 것을 알았을 때 사용하는 것이 가장 좋습니다. 따라서 기본적으로 별도의 리팩토링 프로세스가 포함된 소프트웨어 업데이트의 일부입니다. 기능 개발의 초기 단계에서 코드를 업데이트해야 한다는 사실을 알게 되면 향후 기술 부채를 피할 수 있습니다.
최종 사용자는 이러한 엔지니어링 팀의 노력을 눈으로 볼 수 없지만, 애플리케이션을 작업하는 개발자는 애플리케이션을 구축할 때 코드를 리팩토링하는 것의 가치를 발견하게 됩니다. 코드를 더 일찍 업데이트하는 데 시간을 투자하면 시간, 비용 및 기타 리소스를 절약할 수 있습니다.
이는 마치 동쪽으로 100마일을 가고 싶지만 숲속을 가로질러 걷는 대신 고속도로가 있는 북쪽으로 20마일을 운전한 다음 내가 가질 수 있는 속도의 3배로 동쪽으로 100마일을 갈 예정인 것과 같습니다. 그냥 바로 거기로 갔어요. 사람들이 그냥 직진하라고 하면 가끔은 '잠깐, 지도를 확인해서 가장 빠른 길을 찾아야 해'라고 말해야 할 때도 있습니다. 준비 리팩토링이 그런 일을 해줘요.
자바 int를 문자열로 변환제시카 커 (소프트웨어 개발자)

7. 사용자 인터페이스 리팩토링
UI를 간단하게 변경하고 코드를 리팩터링할 수 있습니다. 예: 입력 필드 정렬, 글꼴 적용, 능동태로 다시 말하기 형식 표시, 공통 버튼 크기 적용, 색상 대비 증가 등.
최종 단어
코드 리팩토링 과정을 정리된 집을 정리하는 과정으로 생각해야 합니다. 집 안의 불필요한 잡동사니는 혼란스럽고 스트레스가 많은 환경을 조성할 수 있습니다. 작성된 코드도 마찬가지입니다. 깨끗하고 잘 구성된 코드는 항상 변경하기 쉽고, 이해하기 쉽고, 유지 관리하기 쉽습니다. 코드 리팩토링 과정을 미리 주의 깊게 살펴보면 나중에 어려움을 겪지 않을 것입니다.
가장 영향력 있는 소프트웨어 개발자 두 명 마틴 파울러 그리고 켄트 벡 코드 리팩토링 프로세스와 그 기술을 설명하는 데 시간을 할애했습니다. 그들은 또한 이 주제에 관한 완전한 책을 썼습니다. 리팩토링: 기존 코드 디자인 개선 . 이 책에서는 이러한 리팩토링 프로세스 작업에 대한 명확한 설명과 함께 다양한 리팩토링 기술을 설명합니다. 코드 리팩토링 프로세스에 대해 자세히 알아보고 싶다면 이 책을 읽어 보시기 바랍니다.