May 2025
Beginner to intermediate
424 pages
7h 7m
Korean
이 작품은 AI를 사용하여 번역되었습니다. 여러분의 피드백과 의견을 환영합니다: translation-feedback@oreilly.com
입력과 출력은 코드에서 문제가 됩니다. 파일이 사라지거나 네트워크 소켓에 장애가 발생하면 프로그램이 외부와 통신하는 데 오류가 발생할 수 있습니다. 입력과 출력도 동작이므로 코드를 추론하고 리팩터링하는 능력이 제한됩니다. 입력과 출력으로 인해 발생하는 문제의 범위를 제한하려면 어떻게 해야 할까요?
앞 장에서 어느 정도 기초를 다졌으니 이제부터는 속도를 높여 리팩토링으로 바로 들어가서 진행하면서 교훈을 얻겠습니다.
10장에서는 마케팅용 보고서를 생성하는 Java 코드를 살펴봤습니다. 코드를 떠날 때 HighValueCustomersReport 에 확장 함수를 도입했습니다:
@Throws(IOException::class)fungenerate(reader:Reader,writer:Writer){valvaluableCustomers=reader.readLines().toValuableCustomers().sortedBy(CustomerData::score)writer.appendLine("ID\tName\tSpend")for(customerDatainvaluableCustomers){writer.appendLine(customerData.outputLine)}writer.append(valuableCustomers.summarised())}privatefunList<String>.toValuableCustomers()=withoutHeader().map(String::toCustomerData).filter{it.score>=10}privatefunList<String>.withoutHeader()=drop(1)privatefunList<CustomerData>.summarised():String=sumByDouble{it.spend}.let{total->"\tTOTAL\t${total.toMoneyString()}"}
다음은 Kotlin으로 전환한 후의 테스트입니다:
classHighValueCustomersReportTests{@Testfuntest(){check(inputLines=listOf("ID\tFirstName\tLastName\tScore\tSpend","1\tFred\tFlintstone\t11\t1000.00","4\tBetty\tRubble\t10\t2000.00","2\tBarney\tRubble\t0\t20.00","3\tWilma\tFlintstone\t9\t0.00"),expectedLines=listOf("ID\tName\tSpend" ...