RAII (Resource acquisition is initialization)
몇몇 객체 지향 언어에서 particular language behavior을 설명하기 위해 사용되는 programming idiom이다. (C++과 가장 연관돼있다.) 안전한 자원 관리를 위해 개발됐다.
RAII에선 자원을 가질 때 class invariant해야하고, 객체의 lifetime을 알고있어야한다.
- 생성자를 통해 객체를 생성하고 초기화할 때 자원 할당을 수행하기 때문에 초기화를 성공하려면 자원 할당도 성공해야한다.
- 자원 해제와 객체 소멸은 소멸자에 의해 수행된다.
- 자원은 초기화가 완료될 때와 종료가 시작될 때 유지되고(class invariant), 객체가 살아있을 때(alive)만 유지되는 것이 보장된다.
= 자원 획득은 초기화(Resource acquisition is initialization)
- 객체 leak이 없음 => 자원의 leak도 없음
기존
RAII
이점
- 캡슐화
: 자원 관리 로직은 클래스에서 한 번만 정의돼어 캡슐화가 제공된다.
- exception safety(스택 자원용)
: 자원을 스택 변수의 수명과 연결하여 스택 자원에 대해 exception safety가 제공된다.
- locality(지역성)
: 클래스 정의에서 생성자와 소멸자를 함께 작성하여 정의의 지역성을 제공한다.
- Deterministic Resource Management
: RAII 개체가 언제 어디서 범위를 벗어나는지, 언제 자원이 해제돼야하는 지를 미리 알 수 있다.
참조 1
참조 2
참조 3