728x90
- 불안한 API를 로직과 직접 결합시키지 않는 것이 좋다
/**
* 외부 API를 랩핑하지 않은 코드
* WeatherService 클래스에서 직접 외부 API를 호출합니다.
* API 응답을 받아 바로 처리합니다.
*/
class WeatherServiceNotWrapped {
fun getWeather(location: String): String {
val response = ExternalWeatherApi.getWeather(location)
return response ?: throw RuntimeException("Failed to fetch weather")
}
}
/**
* 외부 API 클라이언트를 랩핑한 클래스
* WeatherApiWrapper 클래스를 만들어 외부 API 호출을 감쌉니다.
* WeatherService 클래스는 WeatherApiWrapper 를 통해 간접적으로 외부 API 를 호출합니다.
* WeatherApiWrapper 클래스는 예외 처리를 통해 실패 상황을 관리합니다.
*/
class WeatherApiWrapper {
fun getWeather(location: String): String {
val response = ExternalWeatherApi.getWeather(location)
return response ?: throw RuntimeException("Failed to fetch weather")
}
}
// 서비스 클래스
class WeatherService(private val weatherApiWrapper: WeatherApiWrapper) {
fun getWeather(location: String): String {
return weatherApiWrapper.getWeather(location)
}
}
fun main() {
val weatherApiWrapper = WeatherApiWrapper()
val weatherService = WeatherService(weatherApiWrapper)
println(weatherService.getWeather("Seoul"))
}
object ExternalWeatherApi {
fun getWeather(location: String): String? {
return "Sunny"
}
}
- 테스트 코드때 목킹하기는 편하고, 웬만하면 래핑해서 사용중임~
728x90
'공부 > 이펙티브코틀린' 카테고리의 다른 글
아이템 31 - 문서로 규악을 정의하라 (0) | 2024.07.02 |
---|---|
아이템 30 - 요소의 가시성을 최소화하라 (0) | 2024.07.02 |
아이템 28 - API 안정성을 확인하 (0) | 2024.06.23 |
아이템 27 - 변화로부터 코드를 보호하려면 추상화를 사용하라 (0) | 2024.06.21 |
아이템 26 - 함수 내부의 추상화 레벨을 통일하라. (0) | 2024.06.21 |
댓글