[c++] RAII와 예외 처리
RAII(Resoource Acquisition Is Initialization)는 C++ 프로그래밍에서 매우 중요한 개념 중 하나입니다. RAII는 자원의 취득을 자원의 초기화와 결합하여 자원 해제를 자동으로 처리하는 디자인 패턴을 말합니다.
이 디자인 패턴은 많은 상황에서 메모리 누수와 같은 자원 관리 문제를 해결하는 데 도움이 됩니다. 특히, RAII는 예외가 발생했을 때의 처리를 간편하게 해줍니다.
#include <iostream>
#include <fstream>
#include <stdexcept>
class FileHandler {
public:
explicit FileHandler(const std::string& filename) : file(filename) {
if (!file.is_open()) {
throw std::runtime_error("File open error");
}
}
~FileHandler() {
if (file.is_open()) {
file.close();
}
}
void write(const std::string& data) {
if (file.is_open()) {
file << data;
} else {
throw std::runtime_error("File write error");
}
}
private:
std::ofstream file;
};
int main() {
try {
FileHandler fh("test.txt");
fh.write("Hello, RAII!");
} catch (const std::exception& e) {
std::cerr << e.what() << std::endl;
}
return 0;
}
위의 예제에서 FileHandler 클래스는 파일을 열고, 사용이 끝나면 자동으로 파일을 닫는 역할을 합니다. 파일 작업 중 예외가 발생하더라도 FileHandler의 소멸자가 자동으로 호출되어 파일이 닫히게 됩니다. 이로써 메모리 누수를 방지할 수 있습니다.
RAII는 C++ 표준 라이브러리에서도 많이 사용되고 있으며, 스마트 포인터와 파일 입출력 스트림 등 많은 기능에서 이 패턴이 적용되어 있습니다.
RAII는 C++에서 안전하고 유연한 프로그래밍을 지원하는 핵심적인 개념 중 하나이므로, 이를 적절히 이해하고 활용하는 것이 중요합니다.