2009-04-26 2 views
9

나는 이에 대해 두 가지 상반된 견해를 가지고 있습니다. 일부 소식통은 방법 호출을 줄이는 방법은 거의 없어야한다고 말하고 있지만 일부 다른 소식통은 JIT가 최적화를 수행하게하는 데는 짧은 방법을 쓰는 것이 좋다고 말합니다.C#, 긴 메서드 또는 짧은 메서드를 작성하고 있습니까?

그래서 어느 쪽이 맞습니까?

답변

30

실제로 메서드 호출을 만드는 오버 헤드는 대부분의 경우 거의 중요하지 않습니다. 문제의 재검토가 필요한 문제를 명확하게 파악할 수있는 경우가 아니면 걱정할 필요가 없습니다.

코드가 단순하고 읽기 쉽고 모듈화되고 유지 보수가 가능하고 수정할 수 있다는 점이 훨씬 더 중요합니다. 메서드는 한 가지만 수행하고 하위 작업은 다른 루틴에 위임해야합니다. 이것은 당신의 방법이 가능한 짧을 수는 있지만 더 짧지는 않아야 함을 의미합니다. 컴파일러 나 런타임을 능가하려고 시도하는 것보다 간단하고 오류가 적고 버그가 적게 드는 코드를 사용하면 성능이 훨씬 향상됩니다.

메소드가 길어야한다는 출처는 여러 레벨에서 이 잘못되었습니다.입니다.

8

없음, 가독성을 얻으려면 비교적 짧은 방법이 필요합니다..

3

기능 크기에 대한 간단한 규칙은 하나도 없습니다. 지침은 '해야 할 일'이되어야한다. 약간 애매하지만 경험에 따라 더 쉬워집니다. 작은 함수는 일반적으로 가독성을 높입니다. 큰 일이 때때로 필요합니다.

메서드 호출의 오버 헤드가 걱정되는 것은 시기상조입니다.

2

항상 그렇듯이 좋은 균형을 찾는 것입니다. 가장 중요한 것은 방법이 한 가지만 수행한다는 것입니다.. 더 긴 방법은 두 가지 이상을하는 경향이 있습니다.

1

우선, 메소드 수 수준에서 성능을 미세 최적화하지 않아야합니다. 측정 가능한 성능 이점을 얻지 못할 가능성이 큽니다. 수백만 번 반복적으로 호출되는 메서드가있는 경우에만 아이디어가 될 수 있지만 필요할 때까지 최적화를 시작하지 마십시오.

메소드의 의도를 명확하게하는 간결한 메소드를 고집해야합니다. 이렇게하면 이해하기 쉽고 코드를 쉽게 재사용 할 수있는 코드를 쉽게 읽을 수 있습니다.

2

크기 조정 방법을 안내하는 최상의 단일 기준은을 잘 테스트 할 수있는 입니다. 모든 단일 메서드를 철저히 단위 테스트 할 수 있다면 (실제로! -) 코드가 상당히 유용 할 수 있습니다. 테스트를하지 않으면 코드가 평범한 것일 수 있습니다. 방법을 철저히 테스트하기가 어렵다면 그 방법은 "너무 커"일 가능성이 높습니다. 너무 많은 일을하려고하므로 읽기 및 유지가 더 어려워집니다 (나쁜 테스트를 거쳤으므로 버그).

1

코드 작성시 고려해야 할 가장 중요한 비용은 유지 보수입니다. 을 많이 쓰면, 번은 성능 문제를 해결할 때보 다 더 많은 시간을 응용 프로그램을 유지하고 버그를 수정합니다.

대단히 다루기 힘든 방법을 유지하는 비용과 비교할 때 거의 확실한 방법 호출 비용은 엄청나게 적습니다. 작은 간결한 방법은 유지하고 이해하기가 더 쉽습니다. 또한 메서드를 호출하는 비용은 응용 프로그램에 상당한 성능 영향을 미치지 않습니다. 그리고 만약 그렇다면 프로파일 러를 사용해서 만 주장 할 수 있습니다. 개발자들은 성능 문제를 손쉽게 파악하는 것이 좋지 않은 것으로 악명이 높습니다.

일반적으로 성능 문제가 확인되면 해결하기 쉽습니다. 더 중요한 것은 코드베이스를 유지 보수 가능하게 만드는 것이 훨씬 더 많은 비용입니다.

0

개인적으로 나는 글을 쓰는 사람이 글쓰기를 잘하는 한 긴 방법을 두려워하지 않는다. (2 줄 바꿈과 앞에 오는 멋진 주석으로 구분되는 모든 하위 과제의 조각 등.) 또한 ID는 매우 중요하다.). 사실, 나는 (예를 들어, 순차 논리로 특정 순서로 일을하는 코드를 작성할 때) 종종 선호한다.

또한, 왜 내가 긴 방법을 100 개로 나누면 읽기 가능성이 향상되는지 이해할 수 없습니다. 반대편. 코드 내에서 일어나는 일을 완벽하게 파악하기 위해 모든 곳에서 점프하고 메모리에 코드 조각 만 저장하면됩니다. 코멘트, 나쁜 함수 이름, 많은 유사한 함수 이름의 가능한 부족과 결합하면 혼돈에 대한 완벽한 처방이됩니다. 또한 메서드의 크기를 줄이려고 시도하는 동안 반대쪽으로 갈 수 있습니다 : 많은 클래스를 만들고 MANY 매개 변수 각각에 많은 매개 변수가 필요할 수 있습니다. 나는 이것이 가독성을 향상시키지 못한다고 생각한다. (특히 초심자에게는 각 클래스/메소드가하는 단서가없는 프로젝트가있다.)

"기능이 '한 가지해야'한다는 요구는 매우 주관적입니다. '한 가지'는 변수를 하나씩 올리면 '똑같은 일'을위한 많은 작업을 수행 할 수 있습니다.

내 규칙은 재사용 만 가능합니다 : 동일한 코드가 여러 번 나타나지 않아야합니다. 이 경우 새로운 기능이 필요합니다. 나머지는 단지 철학적 인 이야기 일뿐입니다. "왜 당신의 방법을 그렇게 크게 만들 수 있습니까?"라는 질문에서 "코드가 단순하다면 왜 안 되겠습니까?"라고 대답합니다.

(그냥 내 의견 - 원하는만큼 투표하십시오)

관련 문제