RAII 맛보기: 자원이 자동으로 정리되는 이유
17강. RAII 맛보기: 자원이 자동으로 정리되는 이유
이번 강의에서 해결할 문제
파일을 연 뒤 여러 반환 경로마다 닫기 코드를 직접 쓰면 한 경로에서 정리를 빠뜨리기 쉽습니다. 메모리뿐 아니라 파일, 잠금, 소켓도 획득과 해제가 짝을 이루어야 합니다.
학습 목표
- RAII가 자원 수명과 객체 수명을 묶는 원칙임을 설명합니다.
- 생성자와 소멸자의 실행 순서를 출력으로 확인합니다.
- 수동
open·close호출이 흩어진 구조와 비교합니다.
먼저 알아야 할 핵심 개념
RAII는 Resource Acquisition Is Initialization의 약자입니다. 객체가 생성될 때 자원을 사용할 수 있는 상태로 만들고, 객체가 범위를 벗어나 파괴될 때 소멸자가 자원을 정리합니다. C++의 스택 되감기 덕분에 조기 반환과 예외에서도 이미 생성된 지역 객체의 소멸자가 호출됩니다.
가장 작은 실행 가능한 예제
#include <iostream>
class ScopedSession {
public:
ScopedSession() {
std::cout << "open\n";
}
~ScopedSession() {
std::cout << "close\n";
}
void use() const {
std::cout << "use\n";
}
};
int main() {
ScopedSession session;
session.use();
}
핵심 코드 줄별 설명
- 객체 생성과 동시에 세션이 사용 가능한 상태가 됩니다.
- 소멸자는 반환값이 없고 객체가 파괴될 때 자동 호출됩니다.
use는 세션 객체가 존재하는 동안만 호출합니다.main범위가 끝나면 별도close()호출 없이 정리됩니다.- 실제 클래스는 획득 실패를 생성자나 팩토리 결과로 명확히 알려야 합니다.
실행 결과와 값 변화
open
use
close
session.use() 앞에서 별도 블록을 만들면 close 시점도 그 블록 끝으로 당겨집니다. 범위가 자원 수명을 눈에 보이게 합니다.
단계별 실습
실습 목표
로그 세션의 시작과 종료가 모든 경로에서 짝을 이루게 합니다.
시작 전 상태와 실행 방법
예제를 복사하고 runTask(bool canRun) 함수를 추가합니다.
1단계: 최소 코드 작성
함수 안에 ScopedSession을 만들고 정상 경로를 실행합니다.
2단계: 값 또는 조건을 바꿔 결과 비교
canRun이 false면 중간에 반환하고도 close가 출력되는지 확인합니다.
3단계: 작은 기능 확장
생성자에 세션 이름을 받아 열기와 닫기 로그에 표시합니다.
4단계: 스스로 해결하기
복사된 두 객체가 같은 자원을 두 번 닫지 않도록 복사를 금지할지, 공유 모델을 만들지 판단하세요.
막혔을 때
소멸자를 직접 호출하지 않습니다. 자원 수명을 줄이고 싶다면 별도 중괄호 블록으로 객체 범위를 제한합니다. 생성자에서 획득이 실패했는데도 반쯤 유효한 객체가 남지 않게 설계합니다.
흔한 실수와 해결 방법
- RAII를 메모리에만 적용: 파일 스트림, mutex 잠금, 소켓도 같은 원칙을 사용합니다.
- 소멸자에서 실패를 던짐: 스택 되감기 중 예외가 겹치지 않도록 소멸자 정리는 실패를 외부로 던지지 않는 방향이 일반적입니다.
- 수동 close와 자동 정리를 섞음: 단일 책임 객체가 한 번만 정리하도록 계약을 통일합니다.
게임 개발 연결
파일 저장, 프로파일링 구간, 렌더링 상태 잠금처럼 시작과 종료가 반드시 짝을 이루는 작업에 적용됩니다. 엔진 객체는 별도 수명 시스템을 사용할 수 있지만 지역 잠금과 표준 자원은 여전히 RAII가 유용합니다.
이해 점검 질문 3개
- RAII가 조기 반환에서 정리 누락을 줄이는 이유는 무엇인가요?
- 객체 범위와 자원 수명은 어떤 관계인가요?
- 소멸자에서 예외를 던지는 설계가 위험한 이유는 무엇인가요?
핵심 요약
RAII는 자원 획득·사용·정리를 객체의 유효한 수명에 묶습니다. 정리 호출을 기억하는 대신 범위가 끝나면 자동으로 실행되는 언어 규칙을 사용합니다.
다음 강의 연결
18강. unique_ptr 입문에서 동적 객체의 단일 소유권과 삭제를 표준 RAII 타입에 맡깁니다.
RAII 맛보기: 자원이 자동으로 정리되는 이유 미니 퀴즈
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.