환율이 USD, KRW 2가지를 가지고 따지는 시스템이라고 해보자.
if ("USD".equals(currency)) {
// logic
} else {
// KRW 로 취급
}
나라면 이런 경우에 else if KRW 썼을거 같은데, 물론 의미적으로는 그게 맞다. 근데 이렇게 하면 혹시 모르는 이상한 코드가 들어오면 오류가 난다. 그거에 대한 오류 방지 대책을 하던가 위에처럼 else 를 적절하게 활용해야겠다?
클로드가 아래와 같이 처리하는 방안을 추천해주었다.
// [1안] 추천 - 명시적 검증
if ("USD".equals(currency)) {
// USD logic
} else if ("KRW".equals(currency)) {
// KRW logic
} else {
throw new IllegalArgumentException("지원하지 않는 통화: " + currency);
}
// [2안] 방어적 프로그래밍
if ("USD".equals(currency)) {
// USD logic
} else if ("KRW".equals(currency)) {
// KRW logic
} else {
// 로그 남기고 기본값으로 처리
logger.warn("알 수 없는 통화 코드: {}, KRW로 처리", currency);
// KRW logic
}
내가 보기엔 2안이 더 괜찮아 보인다. (무슨 오타날수도 있으니깐) 그리고, 익셉션이 있어서 멈추기보단 일단 뭐라도 나오는 게 더 좋다고 판단했다. 잘못된 정보라도 나오는 게 나은지 안 나오는 게 나은지. 이용 중인 성격에 따라 다를 것이다
아무튼 2안도 동작 자체는 위에랑 같군
이러한 개념을 방어적 프로그래밍이라고 한다고.
방어적 프로그래밍(Defensive programming)은 예상치 못한 입력에도 한 소프트웨어가 계속적 기능 수행을 보장할 수 있도록 고안된 방어적 설계의 한 형태이다.