[책리뷰/Effective Java] 예외

OCTOBER 12, 2020

아이템76) 가능한 한 실패 원자적으로 만들라

일반화 해서 말하자면 호출된 메서드가 실패 하더라도 해당 객체는 메서드 호출 전 상태를 유지해야 한다. 이러한 특성을 실패 원자적(failure atomic)이라고 한다.

메서드를 원자적으로 만드는 방법

  • 불변객체로 설계
  • 작업 수행중에 매개변수의 유효성을 검사
  • 객체의 임시 복사본에서 작업을한 후에 성공시 원래 객체와 교환
  • 작업도중 실패를 가로채는 복구코드를 작성하여 작업전으로 돌리는것
public String substring(int beginIndex) {
    if (beginIndex < 0) {
        throw new StringIndexOutOfBoundsException(beginIndex);
    }
    int subLen = length() - beginIndex;
    if (subLen < 0) {
        throw new StringIndexOutOfBoundsException(subLen);
    }
    if (beginIndex == 0) {
        return this;
    }
    return isLatin1() ? StringLatin1.newString(value, beginIndex, subLen)
                      : StringUTF16.newString(value, beginIndex, subLen);
}

작업 기록 블로그