반응형

리팩터링 46

리팩터링. 매개변수 객체 만들기 (Introduce Parameter Object)

"매개변수 객체 만들기"는 여러 개의 매개변수를 묶어서 하나의 객체로 만들고, 이를 매개변수로 전달하는 방식으로 긴 매개 변수 목록 문제를 해결하는 기법입니다. 예를 들어, 다음과 같은 함수가 있다고 가정해봅시다. double calculate_total_price(double price, int quantity, double tax_rate, double discount) { // 계산 로직 } 이 함수는 네 개의 매개변수를 가지고 있습니다. 이를 "매개변수 객체 만들기" 리팩토링 기법을 사용하여 개선하면 다음과 같이 바꿀 수 있습니다. class Product { public: double price; int quantity; double tax_rate; double discount; Product..

리팩터링 기법. 임시 변수를 질의 함수로 바꾸기 (Replace Temp with Query)

"임시 변수를 질의 함수로 바꾸기 (Replace Temp with Query)"는 메서드 내부에서 임시 변수를 사용하는 대신 해당 계산을 반환하는 메서드를 만드는 리팩터링 기법입니다. 임시 변수를 만든다는 거 자체가 리팩터링이라고 할 수 있습니다. 해당 임수 변수를 통해서 어떤 의도를 가진 로직인지 알 수 있기 때문입니다. 이러한 임시 변수를 만드는 로직 자체를 함수로 만들 수 있습니다. 임시 변수를 만드는 함수는 해당 임시 변수를 사용하는 곳에서 사용하며, 해당 임시 변수를 사용하는 코드 로직을 함수로 추출할 때, 매개 변수 넘겨주는 대신 임시 변수 생성 함수를 호출하는 할 수 있습니다. 예를 들어, 다음과 같은 코드가 있다고 가정해 봅시다. double calculateTotalPrice(int q..

냄새 3. 긴 함수 (Long Function)

긴 함수(Long Function)는 함수나 메소드가 너무 길어서 가독성과 유지보수성이 떨어지는 상태를 말합니다. 코드 중복과 마찬가지로, 긴 함수도 코드 품질을 저하시키고, 디버깅이 어렵고 버그가 발생할 가능성이 높아집니다. 긴 함수의 문제는 몇 가지로 구분할 수 있습니다. 가독성이 떨어진다: 함수가 길어지면 이해하기 어렵습니다. 따라서, 코드를 읽을 때 집중력을 유지하기가 어렵습니다. 버그 발생 가능성이 높아진다: 함수가 길면 복잡도가 높아지므로, 버그 발생 가능성이 높아집니다. 재사용성이 떨어진다: 코드의 기능이 복잡해지면 코드를 재사용하기가 어려워집니다. 따라서, 긴 함수을 해결하기 위해서는 다음과 같은 방법을 고려할 수 있습니다. 함수를 작게 분리: 함수가 한 가지 일만 하도록 작게 분리합니다...

냄새 2. 중복 코드 (Duplicated Code)

"중복 코드 (Duplicated Code)"는 코드의 중복이 발생하여 코드 유지보수의 어려움을 야기하는 코드 냄새(code smell) 중 하나입니다. 코드의 중복은 여러 가지 문제를 야기할 수 있습니다. 코드가 중복되면 코드베이스가 커지게 됩니다. 코드베이스가 커지면 이를 관리하는 데 필요한 시간과 노력이 더 많이 필요해지며, 결국 프로젝트 전반의 생산성 저하로 이어질 수 있습니다. 중복 코드는 변경 사항이 생길 때마다 같은 변경 작업을 반복해야 한다는 것을 의미합니다. 이는 프로그램 내에 버그가 생길 확률을 높입니다. 코드가 중복되면 해당 코드가 수정 할때 중복되는 모든 코드를 일일이 찾아서 수정해야 합니다. 그러다가 중복되는 쪽 수정이 누락되면 버그가 발생할 가능성이 높습니다. 중복 코드를 제거하..

냄새 1. 기이한 이름 (Mysterious Name)

"기이한 이름(Mysterious Name)"은 코드에서 이름만 보고는 의도를 파악하기 어려운 변수나 함수, 클래스 등을 가리키는 용어입니다. 이러한 이름은 코드의 가독성을 저해하며, 유지보수와 리팩토링을 어렵게 만듭니다. "기이한 이름"으로 인한 문제는 다음과 같습니다. 가독성 저하: 이름만으로 변수나 함수의 역할이나 의도를 파악하기 어렵습니다. 이로 인해 코드를 이해하는데 많은 시간과 노력이 필요해지며, 다른 사람들이 코드를 이해하는데 어려움을 겪을 수 있습니다. 유지보수의 어려움: 변수나 함수의 역할이 명확하지 않은 경우, 코드를 수정하거나 개선하는 것이 어려워집니다. 이로 인해 새로운 기능을 추가하거나 버그를 수정하는 것이 더욱 어려워지며, 시간과 비용이 많이 들어가게 됩니다. 따라서 "기이한 이..

리팩터링(refactoring)이란?

리팩터링(refactoring)은 소프트웨어 공학에서 '결과의 변경 없이 코드의 구조를 재조정함'을 뜻한다. 주로 가독성을 높이고 유지보수를 편하게 한다. 버그를 없애거나 새로운 기능을 추가하는 행위는 아니다. 사용자가 보는 외부 화면은 그대로 두면서 내부 논리나 구조를 바꾸고 개선하는 유지보수 행위이다. 리팩터링의 잠재적인 목표는 소프트웨어의 설계, 구조 및 구현을 개선하는 동시에 소프트웨어의 기능을 보존하는 것이다. 리펙터링은 코드의 가독성을 향상시키고 복잡성을 감소시키는 효과를 가지며, 이러한 이점은 소스 코드의 유지 보수성을 개선하고 확장성을 개선하기 위해 더 단순하고, 깔끔하거나, 표현력이 뛰어난 내부 아키텍처 또는 객체 모델을 만들 수 있게 한다. 그리고 소프트웨어 엔지니어는 더 빠르게 수행되..

리팩터링 2023.02.12
반응형