[c++] RAII (Resource acquisition is initialization)

숭글·2023년 1월 4일
0
post-custom-banner

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
profile
Hi!😁 I'm Soongle. Welcome to my Velog!!!
post-custom-banner

0개의 댓글