반응형
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다.
아이템 76. 가능한 한 실패 원자적으로 만들라
실패 원자적(failure-atomic)
호출된 메서드가 실패하더라도 해당 객체는 메서드 호출 전 상태를 유지해야 한다는 특성
메서드를 실패 원자적으로 만드는 방법
- 가장 간단한 방법은 불변 객체로 설계하는 것
- 불변 객체는 태생적으로 실패 원자적이기 때문
- 메서드가 실패하면 새로운 객체가 만들어지지 않을 수 있으나 기존 객체가 불안정한 상태에 빠지는 일은 없다.
- 가변 객체의 메서드를 실패 원자적으로 만드는 가장 흔한 방법은 작업 수행에 앞서 매개변수의 유효성을 검사하는 것이다.
- 객체의 내부 상태를 변경하기 전에 잠재적 예외의 가능성을 대부분 걸러낼 수 있는 방법
ex 1) Stack.pop 메서드
public Object pop() {
if(size == 0){
throw new EmptyStackException();
}
Object result = elements[--size];
elements[size] = null // 다쓴 참조 해제
return result;
}
- 이 메서드는 처음의 if문에서 size값을 확인하여 0이면 예외를 던진다.
- 이 부분을 제거하더라도 스택이 비어있다면 예외를 던지지만, size 값이 음수가 되어 다음번 호출도 실패하게 만들며, 이 때 던지는 ArrayIndexOutOfBoundsException은 추상화 수준이 상황에 어울리지 않다.
반응형
'BE > Java' 카테고리의 다른 글
[Effective Java] 아이템 78. 공유 중인 가변 데이터는 동기화해 사용하라 (0) | 2022.12.19 |
---|---|
[Effective Java] 아이템 77. 예외를 무시하지 말라 (0) | 2022.12.16 |
[Effective Java] 아이템 75. 예외의 상세 메시지에 실패 관련 정보를 담으라 (0) | 2022.12.15 |
[Effective Java] 아이템 74. 메서드가 던지는 모든 예외를 문서화하라 (0) | 2022.12.14 |
[Effective Java] 아이템 73. 추상화 수준에 맞는 예외를 던지라 (0) | 2022.12.14 |