호출된 메소드가 실패하더라고 해당 객체는 메소드 호출 전 상태를 유지해야 한다.

 

메소드를 실패 원자적으로 만드는 방법

  • 불변 객체 생성(아이템 17)

https://puzzle-making.tistory.com/131

 

Item 17 : 변경 가능성을 최소화 하라

불변 클래스에 대한 설명이다. 일단 먼저 클래스를 불변으로 만들기 위한 규칙은 다음과 같다. 객체의 상태를 변경하는 메소드(변경자)를 제공하지 않는다. 클래스를 확장할 수 없도록 한다. 하

puzzle-making.tistory.com

 

 

  • 가변 객체의 메소드를 실패 원자적으로 만드는 가장 흔한 방법은 작업 수행에 앞서 매개변수 유효성 검사를 하는 것(아이템 49)
    • 실패할 가능성이 있는 모든 코드를 객체의 상태를 바꾸는 코드보다 앞에 배치하는 방법도 있다.
    public Object pop() {
        if (size == 0) { //if 문에서 size를 확인해 0이면 예외를 던짐
            throw new EmptyStackException();
        }
        Object result = elements[--size];
        elements[size] == null; // 다 쓴 참조 해제
        return result;
    }

https://puzzle-making.tistory.com/167

 

Item 49 : 매개변수가 유효한지 검사하라

메소드와 생성자 대부분은 입력 매개변수의 값이 특정 조건을 만족하길 바란다 예를 들어 인덱스 값은 음수이면 안된다. 객체 참조는 null이 아니어야 한다 하는 식이다. 이런 제약은 반드시 문

puzzle-making.tistory.com

 

  • 객체의 임시 복사본에서 작업을 수행한 다음 작업이 성공적으로 완료되면 원본 객체와 교환하는 방법
    • 정렬하기 전 원소들을 배열에 배치해 수행한다
  • 작업 도중 발생하는 실패를 가로채는 복구 코드를 작성하여 작업 전 상태로 되돌리는 방법
    • 주로 내구성을 보장해야하는 자료구조에 쓰임, 자주 쓰이진 않음

+ Recent posts