250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 자료구조
- vue.js
- 알고리즘
- 자바
- 이팩티브 자바
- 알고리즘분석
- 인프런김영한
- 클린코드
- 네트워크
- jpa
- 혼공SQL
- java
- react
- mysql
- CleanCode
- 자바예외
- 이펙티브자바
- SQL쿡북
- 스프링부트와AWS로혼자구현하는웹서비스
- AWS RDS
- 기술면접
- DDD
- 이펙티브 자바
- 도메인 주도 개발 시작하기
- MariaDB
- AWS
- 자바스터디
- 인덱스
- 인프런백기선
- aop
Archives
- Today
- Total
기록이 힘이다.
[이펙티브 자바] 아이템76 가능한 한 실패 원자적으로 만들라 본문
728x90
일반화해 이야기하면, 호출된 메서드가 실패하더라도 해당 객체는 메서드 호출 전 상태를 유지해야 한다. => 실패 원자적(failure-atomic)
실패 원자적으로 만드는 방법
1. 불변 객체로 설계하는 것이다.=> 태생적으로 실패 원자적
2. 가변 객체의 메서드를 실패 원자적으로 만드는 가장 흔한 방법은 작업 수행에 앞서 매개변수의 유효성을 검사하는 것이다. 객체의 내부 상태를 변경하기 전에 잠재적 예외의 가능성 대부분을 걸러낼 수 있는 방법이다. ex) TreeMap
public Object pop(){
if(size ==0)
throw new EmptyStackException();
Object result = elements[--size];
elements[size] = null; // 다 쓴 참조 해제
return result;
}
3. 객체의 임시 복사본에서 작업을 수행한 다음, 작업이 성공적으로 완료되면 원래 객체와 교체하는 것이다. 데이터를 자료구조에 저장해 작업하는 게 더 빠를 때 적용하기 좋은 방식이다.
4. 작업 도중 발생하는 실패를 가로채는 복구 코드를 작성하여 작업 전 상태로 되돌리는 방식이다. 주로 내구성 보장하는 자료구조, 자주쓰이는 방법 X
실패 원자성은 일반적으로 권장되는 덕목이지만 항상 달성할 수 있는 것은 아니다
실패 원자적으로 만들 수 있더라도 항상 그리 해야 하는 것도 아니다. 실패 원자성을 달성하기 위한 비용이나 복잡도가 아주 큰 연산도 있기 때문이다.
메서드 명세에 기술한 예외라면 설혹 예외가 발생하더라도 객체의상태는 메서드 호출 전과 똑같이 유지돼야 한다는 것이 기본 규칙이다.
'JAVA' 카테고리의 다른 글
[기술면접] dto와 pojo (0) | 2023.05.26 |
---|---|
[이펙티브 자바] 아이템77 예외를 무시하지 말라 (0) | 2023.04.30 |
[이펙티브 자바] 아이템 75.예외의 상세 메시지에 실패 관련 정보를 담으라. (0) | 2023.04.29 |
[이펙티브 자바] 74. 메서드가 던지는 모든 예외를 문서화하라 (0) | 2023.04.26 |
[이펙티브 자바] 72. 표준 예외를 사용하라 (0) | 2023.04.24 |