더북(TheBook)

이 해법의 한 가지 제약은 n이 상수라는 것이다. n이 상수이기 때문에 매우 큰 원에 대해서는 선분이 너무 길고, 작은 원에 대해서는 너무 짧은 선분을 그리느라 시간을 낭비한다는 것이다. 한 가지 해법은 n을 인자로 받게 함수를 일반화하는 것이다. 이렇게 하면 circle 함수를 호출하는 사용자는 더 많은 것을 제어할 수 있지만, circle 함수의 인터페이스는 덜 깔끔해질 것이다.

함수의 인터페이스(interface)는 함수를 어떻게 사용해야 하는지 요약한 것이다. 즉, 인자는 무엇인가? 함수는 무엇을 하나? 그리고 반환값은 무엇인가? 호출자(caller, 호출하는 사용자)가 불필요한 내용을 다루지 않으면서 원하는 것을 할 수 있다면 이 인터페이스는 깨끗하다(clean)라고 한다.

이 예제에서 r은 그려질 원을 정의하기 때문에 인터페이스에 속한다. n은 원이 어떻게 그려질지를 결정하기 때문에 덜 적합하다.

인터페이스를 채워 넣기 보다는 원의 둘레(circumference)에 따라 적절한 n 값을 선택하는 것이 더 나은 선택이다.

def circle(t, r):

circumference = 2 * math.pi * r

n = int(circumference / 3) + 1

length = circumference / n

polygon(t, n, length)

이제 선분의 개수는 circumference / 3에 가까운 정수로 정해지고, 각 선분의 길이는 약 3이 된다. 이 길이면 원으로 보일 만큼 충분히 작으면서도 효율적일 만큼 충분히 커서 어떤 크기의 원에도 적합할 것이다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.