더 큰 프로그램을 작성하는 동안 여러 번 나는 코드를 함수 나 메소드에 넣는 것이 얼마나 많은 복사 및 붙여 넣기가 좋은지, 그리고 좋은 경험 법칙은 무엇인지에 대해 의문을 제기했습니다. 나는 4 줄 이상의 엄지 손가락 규칙을 사용하고 두 번 이상 나타나고 그 코드를 포함하는 간단한 함수 / 메소드를 만듭니다. 더 나은 방법을 생각하거나 조언을 줄 수 있습니까? 이것은 언어 별 질문보다는 일반적인 디자인 패턴 질문입니다.
더 큰 프로그램을 작성하는 동안 여러 번 나는 코드를 함수 나 메소드에 넣는 것이 얼마나 많은 복사 및 붙여 넣기가 좋은지, 그리고 좋은 경험 법칙은 무엇인지에 대해 의문을 제기했습니다. 나는 4 줄 이상의 엄지 손가락 규칙을 사용하고 두 번 이상 나타나고 그 코드를 포함하는 간단한 함수 / 메소드를 만듭니다. 더 나은 방법을 생각하거나 조언을 줄 수 있습니까? 이것은 언어 별 질문보다는 일반적인 디자인 패턴 질문입니다.
답변:
코드를 문서화하는 방법으로 부분적으로 함수를 사용합니다. 의미있는 이름으로 함수를 호출하면 코드를 더 쉽게 이해할 수 있습니다. 경우에 따라 한 줄의 기능조차도 의미가 있습니다.
예를 들어 "Clean Code"에서 Robert C. Martin은 다음 예제를 제공합니다. 어느 것을 보시겠습니까? 이:
// Check to see if the employee is eligible for full benefits
if ((employee.flags & HOURLY_FLAG) &&
(employee.age > 65))
아니면 이거?
if (employee.isEligibleForFullBenefits())
나는 항상 그에게 동의하지는 않지만이 경우에는 동의합니다. 코드는 코드를 작성할 때뿐만 아니라 모든 세부 사항을 알고있을 때뿐만 아니라 다른 사람의 코드에서 버그를 수정해야하는 오후 9시에 읽을 수 있어야합니다. 긴 상태를 응시하고 모든 이중 음성을 알아내는 것은 권장되지 않습니다. 이름을 입력 할 수 있다면 (조건뿐만 아니라 작성하는 모든 코드) 훨씬 간단 해집니다.
함수에 무언가를 넣는 것을 후회 한 적이 없으며 성능이 걱정된다면 먼저 프로파일하십시오.
반복적 인 코드 세그먼트를 피하기 위해 함수 호출을 수행해야한다는 오해가 널리 퍼져 있습니다. 제 경험에 따르면 논리적 인 작업 단위는 단일 장소에서만 사용되는 경우에도 기능으로 만들어야합니다. 이것은 일반적으로 가독성을 높이고 함수 이름이 주석을 대체하고 수행중인 작업을 설명하는 추가 주석을 작성할 필요가없는 자체 문서화 코드를 작성할 수있게합니다.
여러 곳 에서 사용하는 경우
그런 다음 함수 또는 메소드로 만드십시오. 내 경험상 반복되는 긴 코드 조각은 자연스럽게 이러한 범주 중 하나에 속합니다 (보통 첫 번째 범주이지만 범주는 많이 중복됩니다). 물론, 인터페이스에 있어야하는 것은 그 자체로 기능 / 방법입니다.
float x
: int y
및 double density
) 이러한 계산을 C 함수로 설정하는 것은 코드를 반복하는 것보다 까다로울 수 있습니다. 세 개의 값을 모두 가져 오는 방법을 고안해야하기 때문입니다. 반복 된 계산 자체가 사소한 경우에는 때때로 인라인으로 두는 것이 좋습니다.
거의 항상, 특히 각 복제본이 개념적 관점에서 동일한 작업을 나타내는 경우. 동일한 방식으로 수행되지만 다른 유형으로 수행되는 경우 일반적인 구현을 수행하십시오.
내가 생각할 수없는 유일한 이유는 유지 보수 중 하나입니다. 때로는 중복이 발생하더라도 별도의 항목 사이에 종속성을 피하는 것이 더 편리 할 수 있습니다.
" 리팩토링 "을 검색 하면이 매우 일반적인 프로세스에 대한 업계 "모범 사례"에 대한 많은 리소스가 제공됩니다. 다소 유명한 기사 인 Once and Only Once 는 질문에 의해 제기 된 문제에 대한 "모범 사례"로 어떤 견해를 설명하는 위대한 역사적 참고 자료입니다. 또한 훨씬 일반적인 개념은 DRY (Do n't Repeat Yourself) 로 알려져 있습니다. 귀하의 질문에 대한 답변을 정말 깊이있는 세트의 읽기, 마틴 파울러 의 위대한 고전, 리팩토링 : 기존 코드의 디자인 개선 을 위해 가장 잘 알려진 조언의 일부를 포함, 리팩토링 직관적 달성 하려는지 인을, !
이는 반복되는 코드의 응집 특성에 달려 있습니다. 반복되는 코드 섹션이 특정 기능을 수행하는 경우, 부분적으로 는 DRY 원칙 으로 인해 메소드로 만들 수있는 훌륭한 후보입니다. 처리 할 코드
연관이 우연의 일치라면 코드를 메소드로 만드는 것보다 반복하는 것이 좋습니다. 해당 스 니펫의 사용 중 하나를 만족시키기 위해 코드 시퀀스 중 하나의 중간에 무언가를 추가해야하는 경우, 메소드에서 변경 한 경우 해당 메소드의 다른 사용에 영향을 줄 수 있습니다.
코드 응집 개념에 대한 Wikipedia 기사를 참조하십시오 .