[Effective Java]실패 원자성 달성을 위해 노력하라
2017. 3. 4.
예외를 던지고 난 뒤에도 객체는 상태가 이전 상태와 동일하며 사용가능한 형태로 남아있어야 한다. 특히 checked exception의 경우 그렇다. 위와 같은 코드 처럼 빈 스택에서 뭔가 뽑아내려고 할때 먼저 상황을 체크하고 exception을 throw하여 실패 원자성(failure atomicity)을 갖춘 코드라 볼수 있다. 방법은 크게 두가지가 있다. 1. exception이 났을 때 roll back될수 있도록 코드를 구성한다.2. 실패할 가능성이 있는 코드를 전부 객체 상태를 바꾸는 코드앞에 배치한다. 이러한 실패 원자성은 권장하지만 가은 객체를 여러 스레드가 동기화 없이 접근하는 것과 같은 특수한 경우에는 객체 상태의 일관성이 깨질 가능성이 있다. 또한 실패 원자성을 달성하기 위해 코드의 ..