클린 코드 ‐ 경계[Clean Code 8] - thought-corner/Backend-PlayGround GitHub Wiki
깨끗한 경계
- 경계에서는 변경과 같은 일이 많이 벌어진다.
- 통제가 불가능한 외부 패키지에 의존하는 대신 통제가 가능한 우리 코드에 의존하는 편이 훨씬 좋다.
- 외부 패키지를 호출하는 코드를 가능한 줄여 경계를 관리하는 것이 중요하다.
- 새로운 클래스로 경계를 감싸거나 아니면 Adapter 패턴을 사용해 우리 서비스에서 원하는 인터페이스를 패키지가 제공하는 인터페이스로 변환하자.
// ⭕ Good(Adapter)
class DartFinancialAdapter(
private val dartClient: DartClient // 외부 라이브러리
) : FinancialStatementPort { // 내 인터페이스
override fun fetch(corpCode: String): FinancialStatement {
val response = dartClient.getFinancials(corpCode) // 외부 형식
return toFinancialStatement(response) // 내 도메인으로 변환
}
// 변환 로직을 경계 안에 격리
private fun toFinancialStatement(
response: DartResponse
): FinancialStatement {
return FinancialStatement(
revenue = response.thstrm_amount.toBigDecimal(),
operProfit = response.thstrm_add_amount.toBigDecimal(),
reportedAt = LocalDate.parse(response.rcept_dt)
)
}
}