더북(TheBook)

이들 함수가 올바르다는 것을 납득했다면 이들 함수를 사용해 add_time을 재작성해보자.

def add_time(t1, t2):

seconds = time_to_int(t1) + time_to_int(t2)

return int_to_time(seconds)

이 버전이 원래 버전보다 더 짧고, 검증하기도 더 쉽다. 연습삼아 time_to_intint_to_time을 사용해 increment를 재작성해보자.

어떤 면에서는 60진법을 10진법으로, 10진법을 60진법으로 변환하는 것이 단순히 시간을 다루는 것보다 더 어렵다. 진법 변환이 더 추상적이기 때문이다. 시간 값을 다루는 직관이 더 낫다.

그러나 시간을 60진법 숫자로 다루고, 변환 함수 작성에 투자를 하는 통찰이 있다면 더 짧고, 읽고 수정하기 더 쉽고, 더 안정적인 프로그램을 얻게 된다.

나중에 새로운 기능도 더 쉽게 추가할 수 있다. 예를 들어 두 Time 객체 사이의 경과 시간을 알아내기 위해 Time 객체의 빼기가 필요하다고 하자. 순진한 접근 방법이라면 받아내림으로 빼기를 구현해야 할 것이다. 여기서 소개한 변환 함수를 사용하면 더 쉽게, 그리고 더 올바르게 동작하는 빼기를 구현할 수 있을 것이다.

역설적이게도 때로는 프로그램을 더 어렵게 만드는 것(또는 더 일반화하는 것)이 프로그램을 더 쉽게 만든다(왜냐하면 특수 케이스가 더 적고, 오류 가능성이 더 낮기 때문이다).

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